首页 >后端开发 >C++ >如何在 C 11 中为具有'unique_ptr”成员的类实现复制构造函数?

如何在 C 11 中为具有'unique_ptr”成员的类实现复制构造函数?

Barbara Streisand
Barbara Streisand原创
2024-12-03 10:54:17141浏览

How to Implement Copy Constructors for Classes with `unique_ptr` Members in C  11?

为具有 unique_ptr 成员的类实现复制构造函数

使用使用 unique_ptr 成员变量的类时,实现复制构造函数变得至关重要。在本文中,我们将深入研究在 C 11 中为此类类创建复制构造函数的技术。

由于 unique_ptr 无法共享,因此必须深度复制其内容或将其转换为共享_ptr。以下示例演示了深度复制:

class A
{
   std::unique_ptr<int> up_;

public:
   A(int i) : up_(new int(i)) {}
   A(const A&amp; a) : up_(new int(*a.up_)) {}
};

在这种方法中,分配一个新的 unique_ptr 并分配原始指针内容的副本。

或者,可以使用移动构造函数复制构造函数的:

A(A&&amp; a) : up_(std::move(a.up_)) {}

但是,此方法引入了不同的语义,因为它转移了从源到目标对象的 unique_ptr。

为了完整性,完整的赋值运算符集将是:

A&amp; operator=(const A&a)
{
   up_.reset(new int(*a.up_));
   return *this;
}

A&amp; operator=(A&&amp; a)
{
   up_ = std::move(a.up_);
   return *this;
}

决定是否使用复制或移动构造函数取决于上下文。如果该类打算在 std::vector 中使用,则使该类仅移动或可复制之间的选择取决于该向量是否应该是对象的唯一所有者。

以上是如何在 C 11 中为具有'unique_ptr”成员的类实现复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn