gpt4 book ai didi

c++ - 创建由共享指针 vector 的元素指向的对象的拷贝

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:45 25 4
gpt4 key购买 nike

我有一个类customClass1具有 std::vector<std::shared_ptr<customClass2>> 的属性.

如何复制 customClass1包含指向第一个 std::vector<std::shared_ptr<customClass2>> 的元素所指向的对象的相同拷贝 的指针的对象?

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

最佳答案

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

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”?isocpp.org FAQ

关于c++ - 创建由共享指针 vector 的元素指向的对象的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com