创建shared_pointers

时间:2016-01-15 19:23:55

标签: c++ c++11 vector shared-ptr smart-pointers

我的课程customClass1的属性为std::vector<std::shared_ptr<customClass2>>

如何制作customClass1对象的副本,该对象包含指向第一个std::vector<std::shared_ptr<customClass2>>元素所指向的对象的相同副本的指针?

想简单地制作载体中包含的指针的副本。我想实际制作指针指向的对象的副本,然后指向存储在我的第二个customClass1对象的向量属性中的这些新对象。

1 个答案:

答案 0 :(得分:8)

您将要做的是遍历要复制的向量并创建与您要复制的向量中的基础对象具有相同值的新id。你可以用:

来做到这一点
SELECT id,
       ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rk1,
       ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rk2
FROM data ORDER BY rk1

如果您正在处理多态类型,这将切割对象,因为您有一个指向基座的指针,因此只会复制低音部分。如果您使用的是多态类型,则可以创建id rk1 rk2 5 1 1 3 2 2 7 3 3 10 4 4 6 5 5 8 6 6 1 7 7 9 8 8 2 9 9 4 10 10 克隆函数并使用id rk1 rk2 5 1 6 3 2 3 7 3 9 10 4 1 6 5 8 8 6 5 1 7 7 9 8 10 2 9 4 4 10 2 复制对象。有关详情,请参阅What is a “virtual constructor”?

上的isocpp.org FAQ