unique_ptr 中删除的构造函数

Constructor deleted in unique_ptr

正在阅读更多关于智能指针的内容,并发现当您将一个 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<> 的情况下,对象设置为 "empty"(即分配 nullptr)。

unique_ptr class:

The class satisfies the requirements of MoveConstructible and MoveAssignable, but of neither CopyConstructible nor CopyAssignable.

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

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