创建由shared_pointers向量的元素所指向的对象的副本
Create a copy of objects pointed to by elements of a vector of shared_pointers
我有一个类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 常见问题解答
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 如何从构造函数副本 T(const T&)调用对象 T?
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- 将 Eigen::MatrixXd 转换为 arma::mat 并在新对象上制作副本
- C++ 在其自己的类中创建对象的修改副本
- 如何不删除基类对象的副本?
- 属于副本被推送到矢量的对象的指针会发生什么情况?
- 如何确保将对象通过许多层的组件时,不会制作副本
- C++ 如何创建链表的副本作为类对象
- 保留对象成员变量的本地副本
- 如何为同一类对象的成员函数保留单独的变量副本?
- 是 std::make_pair 在将对象添加到地图时创建副本
- 阻止用户创建班级对象的副本,但允许动态的对象有什么好处
- 替代STD ::向量存储参考而不是对象的副本
- 使用矢量push_back代码创建对象副本时遇到问题
- C++ 如何处理带有破坏状态的析构函数的对象副本
- 将对象副本添加到容器的更好方法
- 带有抽象类指针的c++对象副本
- 调用接收对象副本的函数后,原始函数将重置