繁体   English   中英

在 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<>的情况下,对象设置为“空”(即分配nullptr )。

unique_ptr类:

该类满足 MoveConstructible 和 MoveAssignable 的要求,但既不满足 CopyConstructible 也不满足 CopyAssignable 的要求。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM