没有要显示的代码,只是一个一般问题
如果你有一个类中有一个唯一的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
进行浅层复制是不可能的。