具有独特指针的深浅克隆

dav*_*000 4 c++ unique-ptr

没有代码显示,但一般问题

如果您有一个包含唯一 ptr 的类,那么浅拷贝和深拷贝之间的区别有何相关性?

Tan*_*dar 7

浅拷贝会给你留下双重自由和悬空指针错误,通常是 UB。

您不能与std::unique_ptr<T>成员进行浅拷贝,因为重点std::unique_ptr<T>是单一所有权。另一方面,具有 type 成员的类型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如果您想要共享所有权,只需使用。