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<>
的情况下,对象设置为"空"(即分配nullptr
(。
unique_ptr
类:
复制该类满足 MoveConstructible 和可移动可分配,但既不是可复制的,也不是可复制的。
构造函数和复制赋值运算符在unique_ptr的情况下不起作用。unique_ptr独家拥有所有权。它不能被共享。
https://en.cppreference.com/w/cpp/memory/unique_ptr
删除了
复制构造器和复制赋值运算符。因此,唯一指针无法复制并分配给其他对象。
相关文章:
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- std::ofstream 作为类成员删除复制构造函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 具有已删除移动和复制构造函数的类的就地构造
- 聚合初始化和删除的复制构造函数,也称为不可复制的 obejcts 作为字段
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 我的类中几乎所有的构造函数和解构函数都被隐式定义为已删除?
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 调用类模板中隐式删除的复制构造函数
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 编译器在C++中调用另一个函数时,在参数中查找已删除的构造函数
- 在构造函数中删除后继续执行
- 删除了在初始值设定项中调用的构造函数
- 删除使数据处于"错误状态"的默认构造函数的模式?
- C ++(为什么)确实移动构造函数删除运算符=
- 仅仅以避免隐式复制构造函数删除,使用shared_ptr而不是unique_ptr作为类成员明智