创建由shared_pointers向量的元素所指向的对象的副本

Create a copy of objects pointed to by elements of a vector of shared_pointers

本文关键字:对象 副本 元素 创建 shared pointers 向量      更新时间:2023-10-16

我有一个类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 常见问题解答