에 새 개체를 추가하는 방법을 이해할 수 없습니다. unique_ptr의 std :: list에 이상한 문제가 있습니다.std :: list <std :: unique_ptr <classname>>
클래스 slFlyingMonster는 클래스 slMonster에서 파생되었습니다.
다음 코드는 작동 :
std::unique_ptr<slMonster> ptr(new slFlyingMonster(md));
그러나이 코드 :
std::list<std::unique_ptr<slMonster>> mMonsters;
mMonsters.push_back(new slFlyingMonster(md));
오류 발생을 :
"Error 1 error C2664: 'void
std::list>,std::allocator>>>::push_back(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : cannot convert argument 1 from 'slFlyingMonster *' to 'std::unique_ptr> &&'"
나는 이해하지만, 뭔가 표준 : : 목록과 같은 잘못이다 .push_back()은 =와 같지 않지만 새 클래스를 unique_ptr로 올바르게 추가하는 방법을 알아낼 수 없습니다. 어떤 제안이라도 대환영입니다.
'mMonsters.push_back ({new slFlyingMonster (md)});는 컴파일되지 않습니다. 그 생성자는'explicit'입니다. –
@ T.C. 고마워요. 인상 목록 아래에있었습니다. 초기화는 명시 적 생성자를 허용했습니다. 나는 고쳤다 – Angew
이것은 예외 안전하지 않다. 'list'는 요소를 생성하기 전에 새로운 노드를 할당해야하며,이 경우 throw 될 수 있습니다.이 경우 새로 할당 된 객체가 유출됩니다. –