在unique_ptr中删除了构造函数

时间:2017-04-05 06:15:33

标签: c++ 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语义工作正常。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

那是无效的。您应该只删除一次相同的分配。

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