【发布时间】:2018-07-02 09:37:30
【问题描述】:
使用原始指针,我可以创建一个指针向量和 push_back 地址,如下所示:
Entity objEntity;
std::vector<Entity*> Entities;
Entities.push_back(&objEntity);
如果我改为使用共享指针向量:
std::vector<std::shared_ptr<Entity>> Entities;
...我如何 push_back 地址?
据我了解,std::shared_ptr::reset 用于将现有对象的地址分配给智能指针。是否需要先创建一个临时指针,调用reset,然后push_back?
std::shared_ptr<Entity> temp;
temp.reset(&objEntity);
Entities.push_back(temp);
【问题讨论】:
-
为什么不 push_back(make_shared(objEntity)) ?
-
当你使用 push_back 时,会调用一个复制构造函数。
-
@Clonk 仅当您将左值引用传递给它时。
-
如果你想让它执行然后更喜欢 Boost.PolyCollection 到智能指针向量(它通常会获胜,因为它会减少内存碎片),如果你因为任何原因不能使用 boost 然后使用 unique_ptr 的向量摆脱 shared_ptr 的双重间接和其他开销。
标签: c++ smart-pointers stdvector