New*_*cks 0 c++ smart-pointers vector shared-ptr c++11
我有一个customClass1有一个属性的类std::vector<std::shared_ptr<customClass2>>.
如何制作一个customClass1对象的副本,该对象包含指向第一个元素所指向的对象的相同副本的指针std::vector<std::shared_ptr<customClass2>>?
我并不想简单地使包含于载体指针的副本.我想实际制作指针指向的对象的副本,然后指向存储在我的第二个customClass1对象的vector属性中的这些新对象.
您要做的是遍历要复制的向量并创建与您要复制的向量shared_ptr中的基础对象具有相同值的新s.你可以这样做:
std::vector<std::shared_ptr<customClass2>> original; // this has the data to copy
std::vector<std::shared_ptr<customClass2>> copy;
copy.reserve(original.size()); // prevent reallocations
for (const auto& e : original)
copy.push_back(std::make_shared<customClass2>(*e));
Run Code Online (Sandbox Code Playgroud)
如果您正在处理多态类型,这将切割对象,因为您有一个指向基座的指针,因此只会复制低音部分.如果您使用的是多态类型,则可以创建virtual克隆函数并用于clone()复制对象.有关详细信息,请参阅什么是"虚拟构造函数"?在isocpp.org常见问题解答
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |