'unique_ptr”参数应该如何在 C 构造函数和函数中传递?
如何在构造函数和函数中处理 unique_ptr 参数
场景
考虑一个类将自身引用为如下:
class Base { public: typedef unique_ptr<Base> UPtr; Base() {} Base(Base::UPtr n) : next(std::move(n)) {} virtual ~Base() {} void setNext(Base::UPtr n) { next = std::move(n); } protected: Base::UPtr next; };
登录后复制
传递 unique_ptr 参数的方法
要有效使用 unique_ptr 参数,请考虑以下方法:
1.按值 (A)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
登录后复制
当作为 Base newBase(std::move(nextBase)); 调用时,此方法将指针的所有权转移给函数。构建完成后,nextBase 变为空。
2.通过非常量左值引用 (B)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
登录后复制
这需要一个实际的左值(命名变量)并允许函数潜在地声明指针的所有权。
3。通过 const 左值引用 (C)
Base(std::unique_ptr<Base> const &n);
登录后复制
这可以防止函数存储指针,但保证在执行期间访问该对象。
4。按右值参考 (D)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
登录后复制
与 (B) 类似,但在传递非临时参数时需要使用 std::move。该函数可能会也可能不会声明所有权。
建议
- 将所有权转移给函数时应使用方法 (A) .
- 方法 (C) 推荐用于仅使用unique_ptr 的持续时间。
- 方法 (D) 应避免,因为它在所有权转移方面不明确。
操作 unique_ptr
要移动 unique_ptr,请使用 std::move。这可以避免复制并确保所有权的正确转移。
以上是'unique_ptr”参数应该如何在 C 构造函数和函数中传递?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)