我有一个类customClass1
,其属性是std::vector<std::shared_ptr<customClass2>>
。
如何制作一个customClass1
对象的副本,其中包含指向第一个std::vector<std::shared_ptr<customClass2>>
元素所指向的对象的相同副本的指针?
我不想简单地复制矢量中包含的指针。我想实际复制指针指向的对象,然后将指向这些新对象的指针存储在我的第二个customClass1
对象的 vector 属性中。
你要做的是遍历要复制的向量,并创建新的shared_ptr
,这些的值与要从中复制的向量中的基础对象具有相同的值。 您可以通过以下方式执行此操作:
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));
如果您正在处理多态类型,这将对对象进行切片,因为您有一个指向基底的指针,因此只会复制低音部分。 如果使用多态类型,则可以创建virtual
克隆函数并使用clone()
复制对象。 有关此内容的更多信息,请参阅什么是"虚拟构造函数"?在 isocpp.org 常见问题解答