首页 > 后端开发 > C++ > 'unique_ptr”参数应该如何在 C 构造函数和函数中传递?

'unique_ptr”参数应该如何在 C 构造函数和函数中传递?

Barbara Streisand
发布: 2024-12-18 10:08:11
原创
207 人浏览过

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

如何在构造函数和函数中处理 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板