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

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

我有一个 class customClass1 和一个 属性 是 std::vector<std::shared_ptr<customClass2>>.

如何创建一个 customClass1 对象的副本,其中包含指向第一个 [=12= 的元素指向的对象的 相同副本 ]?

不想简单地复制向量中包含的指针。我想实际复制指针指向的对象,然后将指向这些新对象的指针存储在我的第二个 customClass1 对象的向量 属性.

您需要做的是遍历要复制的矢量并创建新的 shared_ptrs,其值与要从中复制的矢量中的基础对象相同。你可以这样做:

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() 复制对象。有关更多信息,请参阅 What is a “virtual constructor”? on the isocpp.org FAQ