首页 > 解决方案 > 具有唯一指针的深浅克隆

问题描述

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

如果您有一个具有唯一 ptr 的类,那么浅拷贝和深拷贝之间的区别是什么?

标签: c++unique-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它什么都不做。但是为什么要打扰呢?shared_ptr如果您想要共享所有权,只需使用。


推荐阅读