正在阅读有关智能指针的更多内容,并且在将一个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语义工作正常。
答案 0 :(得分:2)
由于唯一指针应该是唯一的,因此无法复制。它只能被移动。
因此,删除了复制构造函数。
答案 1 :(得分:0)
正常的复制语义将导致q
和p
都持有指向同一Person
对象的指针,并且它们的析构函数将delete
同一个对象。
那是无效的。您应该只删除一次相同的分配。
移动语义允许修改被复制的对象。在std::unique_ptr<>
的情况下,对象设置为“空”(即分配nullptr
)。