使用原始指针,我可以像这样创建一个指针 vector 和 push_back 地址:
Entity objEntity;
std::vector<Entity*> Entities;
Entities.push_back(&objEntity);
如果我改为使用共享指针 vector :
std::vector<std::shared_ptr<Entity>> Entities;
...我如何推回地址?
据我了解,std::shared_ptr::reset 用于将现有对象的地址分配给智能指针。我需要先创建一个临时指针,调用 reset,然后再 push_back 吗?
std::shared_ptr<Entity> temp;
temp.reset(&objEntity);
Entities.push_back(temp);
最佳答案
您可以使用 emplace_back
从现有指针构造新的共享指针:
Entity* entity = new Entity;
std::vector<std::shared_ptr<Entity>> Entities;
Entities.emplace_back(entity);
或者,您可以使用 push_back
通过 make_shared
构造对象。
Entities.push_back(std::make_shared<Entity>());
无法安全地添加现有对象(不是作为指针创建的对象)。您可以添加现有指针,或在创建共享指针时制作拷贝。
如果添加现有对象的地址,您将尝试释放内存两次,因为共享指针的析构函数会破坏该对象:
Entity entity;
std::vector<std::shared_ptr<Entity>> Entities;
Entities.emplace_back(&entity); // incorrect usage
// What happens when entity and shared pointer both go out of scope??
关于c++ - 如何将现有对象 push_back 到共享指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51133106/