2017-04-05 146 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)。

相關問題