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

时间:2013-03-21 11:23:04

标签: c++ boost shared-ptr

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

3 个答案:

答案 0 :(得分:1)

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

boost::shared_ptr无法知道您的对象的结构为您执行此操作。也不能进行“内存克隆”操作。

当然,这仅适用于需要明确定义的复制构造函数/ operator=的对象,而“普通”复制构造函数需要浅层复制。

答案 1 :(得分:1)

如果您知道对象的确切类型,那么您应该使用复制构造函数或复制赋值运算符。

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

答案 2 :(得分:0)

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

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

为了深度复制指针。