unique_ptr中删除的构造函数

Constructor deleted in unique_ptr

本文关键字:构造函数 删除 ptr unique      更新时间:2023-10-16

正在阅读有关智能指针的更多信息,并遇到了将一个unique_ptr复制到另一个时构造函数被删除的概念。这个概念到底是什么?

#include<iostream>
#include<memory>
class Person {
  public:
  int e;
  Person(int e) : e(e) { }
};
int main() {
  std::unique_ptr<Person> p (new Person(5));
  // Below line seems to be deleting constructor and thus error in compiling.
  std::unique_ptr<Person> q  = p;
}

std::move语义虽然工作正常。

由于唯一指针应该是唯一的,因此无法复制。 它只能被移动。

因此,复制构造函数被删除。

正常的复制语义将导致qp都持有指向同一Person对象的指针,然后它们的析构函数都将delete同一对象。

这是无效的。应只删除一次相同的分配。

但是,允许移动语义修改要复制的对象。在std::unique_ptr<>的情况下,对象设置为"空"(即分配nullptr(。

unique_ptr类:

该类满足 MoveConstructible 和可移动可分配,但既不是可复制的,也不是可复制的。

复制

构造函数和复制赋值运算符在unique_ptr的情况下不起作用。unique_ptr独家拥有所有权。它不能被共享。

https://en.cppreference.com/w/cpp/memory/unique_ptr

删除了

复制构造器和复制赋值运算符。因此,唯一指针无法复制并分配给其他对象。

相关文章: