首页 >后端开发 >C++ >复制类时如何处理唯一指针?

复制类时如何处理唯一指针?

Patricia Arquette
Patricia Arquette原创
2024-12-15 16:00:24702浏览

How to Handle Unique Pointers When Copying a Class?

复制类中的唯一指针

复制包含唯一指针作为成员的类需要特殊考虑。唯一的指针无法共享,这需要对其内容进行深度复制或转换为共享指针。

深度复制

深度复制方法创建一个新的唯一指针并使用原始指针内容的副本初始化它:

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

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

这里,A 的复制构造函数深层复制原始唯一指针指向的 int。

转换为共享指针

或者,您可以将唯一指针转换为共享指针,这允许在多个对象之间共享:

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

public:
   B(int i) : up_(new int(i)) {}
   B(const B& b)
   {
      up_ = std::make_shared(*b.up_);
   }
};

在此示例中,B 的复制构造函数将唯一指针转换为共享指针指针,使 B 的多个副本能够访问相同的基础数据。

其他运算符

为了与容器(如 std::vector)无缝工作,通常需要附加运算符必填:

  • 移动构造函数:

    B(B&& b)
    {
     up_ = std::move(b.up_);
    }
  • 复制赋值:

    B& operator=(const B& b)
    {
     up_ = std::make_shared(*b.up_);
     return *this;
    }
  • 移动赋值:

    B& operator=(B&& b)
    {
     up_ = std::move(b.up_);
     return *this;
    }

这些运算符确保可以在各种上下文中安全地赋值和复制对象。

以上是复制类时如何处理唯一指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

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