c++ - 具有唯一指针的深浅克隆
问题描述
没有要显示的代码,而是一个一般性问题
如果您有一个具有唯一 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
如果您想要共享所有权,只需使用。
推荐阅读
- php - Laravel 在请求验证中使用 config()
- r - 最大灵敏度/特异性与 ROC 曲线之间的关系是什么?
- python - 在 pandas DataFrame 中检查 dtype 时的注意事项
- string - 如何将从文件中读取的数字从str转换为int?
- sql - SQL:计算最后一个相等的值
- node.js - 在 Nexus 中获取最新版本的节点包
- python - 无论如何要在熊猫中重置多索引?
- karma-jasmine - TypeError:无法在打字稿规范文件上读取 null 的属性“长度”
- javascript - Switch 语句默认值始终显示默认值
- python - 导入base64模块后python脚本变慢