创建由 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_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));
如果您正在处理多态类型,这将切片对象,因为您有一个指向基的指针,因此只会复制低音部分。如果您正在使用多态类型,您可以创建一个 virtual
克隆函数并使用 clone()
复制对象。有关更多信息,请参阅 What is a “virtual constructor”? on the isocpp.org FAQ
我有一个 class customClass1
和一个 属性 是 std::vector<std::shared_ptr<customClass2>>
.
如何创建一个 customClass1
对象的副本,其中包含指向第一个 [=12= 的元素指向的对象的 相同副本 ]?
我不想简单地复制向量中包含的指针。我想实际复制指针指向的对象,然后将指向这些新对象的指针存储在我的第二个 customClass1
对象的向量 属性.
您需要做的是遍历要复制的矢量并创建新的 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));
如果您正在处理多态类型,这将切片对象,因为您有一个指向基的指针,因此只会复制低音部分。如果您正在使用多态类型,您可以创建一个 virtual
克隆函数并使用 clone()
复制对象。有关更多信息,请参阅 What is a “virtual constructor”? on the isocpp.org FAQ