使用独特指针进行深度和浅层克隆

  • 本文关键字:深度 指针 c++ unique-ptr
  • 更新时间 :
  • 英文 :


没有要显示的代码,只是一个一般问题

如果你有一个类中有一个唯一的ptr,那么浅拷贝和深拷贝之间的区别是什么复制相关?

浅拷贝会给您留下两个空闲和悬挂指针错误,通常是UB。

由于std::unique_ptr<T>的全部意义是单一所有权,因此不能使用std::unique_ptr<T>成员进行浅层复制。另一方面,具有类型std::shared_ptr<T>的成员的类型将按预期工作,因为shared_ptr是引用计数的。

为了从另一个方向扩展上述差异,为了更好地解释注释,unique_ptr的唯一所有权前提要求unique_ptr(const unique_ptr<T>&)unique_ptr& operator=(const unique_ptr<T>&)都是= delete;,因为任何一个都会违反保证。此外,您还需要提供一些扩展方法,允许克隆指向的对象。shared_ptr在概念上涉及在任何一种情况下增加引用计数,并且不需要克隆。

理论上,您可以从其他可重复使用的池中分配对象,并为unique_ptr提供一个自定义的deleter,它什么也不做。但为什么要麻烦呢?如果您想要共享所有权,只需使用shared_ptr即可。

使用默认复制构造函数的浅复制指针将留下悬空指针。(指向未分配/释放内存的指针(

unique_ptr不可复制。指针只能移动到另一个CCD_ 13中或制作到CCD_ 14中。unique_ptr的全部目的是具有一个指向某个内存块的引用(在本例中为指针(

这意味着使用unique_ptr进行浅层复制是不可能的。

相关内容

  • 没有找到相关文章

最新更新