How to push_back existing objects to a vector of shared pointers?(如何将现有对象推回到共享指针的向量中?)
本文介绍了如何将现有对象推回到共享指针的向量中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用原始指针,我可以创建指针和Push_Back地址的矢量,如下所示:
Entity objEntity;
std::vector<Entity*> Entities;
Entities.push_back(&objEntity);
如果我改用共享指针向量:
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??
这篇关于如何将现有对象推回到共享指针的向量中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:如何将现有对象推回到共享指针的向量中?


基础教程推荐
猜你喜欢
- 初始化列表*参数*评估顺序 2021-01-01
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- CString 到 char* 2021-01-01
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16