2017-04-05 115 views
0

当您将一个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语义工作正常。

+0

你想知道什么? 'std :: unique_ptr'可以移动但不能复制,因为它是* unique *。 – songyuanyao

+0

啊。错过了这个微小的细节。 –

回答

2

由于唯一的指针应该是唯一的,所以它不能被复制。它只能被移动。

因此,拷贝构造函数被删除。

0

正常复制语义将导致qp保持指向同一个对象的指针,并且它们的两个析构函数会将delete作为同一个对象。

这是无效的。您应该只删除一次相同的分配。

但是,移动语义允许修改正在复制的对象。在std::unique_ptr<>的情况下,该对象被设置为“空”(即,被分配为nullptr)。