[英]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 语义虽然工作正常。
由于唯一指针应该是唯一的,因此它不能被复制。 它只能移动。
因此,复制构造函数被删除。
正常的复制语义将导致q
和p
都持有指向同一个Person
对象的指针,然后它们的析构函数将delete
同一个对象。
那是无效的。 您应该只删除一次相同的分配。
然而,移动语义允许修改被复制的对象。 在std::unique_ptr<>
的情况下,对象设置为“空”(即分配nullptr
)。
unique_ptr
类:
该类满足 MoveConstructible 和 MoveAssignable 的要求,但既不满足 CopyConstructible 也不满足 CopyAssignable 的要求。
复制构造函数和复制赋值运算符在 unique_ptr 的情况下不起作用。 unique_ptr 独占所有权。 它不能被共享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.