我已经读过,unique_ptr
如果要使用push_back
from ,需要为a定义一个删除器std::vector<std::unique_ptr<T>>
。真的吗?如果是,执行此操作的正确语法是什么?
谢谢您的回答
不,通常情况下不需要自定义删除器。对于现有的unique_ptr
:
vector.push_back(std::move(ptr));
工作正常(将指针的所有权转让给vector
);对于新的指针:
vector.push_back(std::make_unique<MyType>(args, go, here));
是最安全的(因为它确保始终管理指针,即使push_back
抛出异常也是如此),它具有:
vector.emplace_back(new MyType(args, go, here));
可能会更快一些,但如果vector
引发异常(例如由于扩展基础存储的尝试失败)而以潜在的内存泄漏为代价;尽管在这种情况下,您的程序可能仍然注定要失败,所以它可能不值得捍卫反对)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句