我对unique_ptr的std :: list有个奇怪的问题。无法理解如何向std :: list添加新对象<std :: unique_ptr <classname>>
Class 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> &&'"
虽然我明白了,什么是错的,比如std ::名单.push_back()与=不一样,但我无法弄清楚如何正确地将新类作为unique_ptr添加到列表中。任何建议将非常受欢迎。
'mMonsters。push_back({new slFlyingMonster(md)});'不会编译。该构造函数是'explicit'。 – 2014-09-29 07:16:37
@ T.C。非常感谢,修复。我在印象列表 - 初始化允许显式构造函数。我站在更正 – Angew 2014-09-29 07:46:08
这不是异常安全的。 'list'在构造元素之前必须分配一个新节点,这可能会抛出新的对象被泄漏。 – 2014-09-29 12:29:16