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 语义工作正常。
由于唯一指针应该是唯一的,所以不能被复制。它只能移动。
因此,复制构造函数被删除。
正常的复制语义将导致 q
和 p
持有指向同一个 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 独家拥有所有权。无法共享。
正在阅读更多关于智能指针的内容,并发现当您将一个 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<>
的情况下,对象设置为 "empty"(即分配 nullptr
)。
unique_ptr
class:
The class satisfies the requirements of MoveConstructible and MoveAssignable, but of neither CopyConstructible nor CopyAssignable.
复制构造函数和复制赋值运算符在unique_ptr的情况下不起作用。 unique_ptr 独家拥有所有权。无法共享。