如何将 boost::shared_ptr 后面的完整对象深度复制到指向<T>新位置shared_ptr?

How to deep copy full object behind boost::shared_ptr<T> into shared_ptr pointing to new location?

本文关键字:ptr shared gt lt 位置 新位置 深度 boost 复制 对象      更新时间:2023-10-16

如何复制boost::shared_ptr<T>后面的完整对象:是否有memcopy选项(只是创建内存克隆),或者我们应该创建复制构造函数?

您需要一个复制构造函数或operator=来执行深度复制。

boost::shared_ptr不能知道你的对象的结构来为你做这件事。"内存克隆"操作也不能。

当然,这只适用于需要显式定义复制构造函数的对象/operator=和"平凡"的对象进行浅复制。

如果知道对象的确切类型,则应该使用复制构造函数或复制赋值操作符。

如果对象是继承层次结构中类的实例,并且您不知道对象的确切类型,则应该使用虚拟克隆函数

您应该创建一个复制构造函数并编写如下内容:

ptr.reset(new T);
*ptr  = *(otherObject.ptr);