2014-02-25 139 views
0

請原諒簡單的問題,但我無法理解指向集合的指針。共享指針向量

想象一下,我有個字節的這一載體:

vector<uint8_t> n; 

我想這些信息存儲在一個共享的指針。爲什麼我需要(&)運算符的地址?

shared_ptr<vector<uint8_t>> m(&n); 

我認爲構造函數會花費n。但我也認爲我對這裏發生的事情有深刻的誤解:)

+1

構造函數的參數應該是一個指針。 – Brian

+2

我不想成爲那個人,但是......我認爲你的意思是錯誤理解。除非你真的害怕:p(我很快就會刪除這條評論) – keyser

+0

錯誤的表達:錯誤的印象,錯誤的印象或不正確的理解,尤其是某種情況的本質或某人的意圖。 (儘管我把它改爲誤解,因爲我對英語不太好)。 –

回答

4

我想將它存儲在共享指針中。

不,你不知道。共享指針用於管理需要刪除的動態對象;這個向量不是用new創建的,所以不能由(普通)共享指針管理。指針會試圖刪除它,造成混亂。爲什麼我需要地址的(&)運算符

auto m = make_shared<vector<uint8_t>>();  

您要創建矢量動態,以便shared_ptr能夠正確地管理它?

由於共享指針(通常)用於管理與new創建的對象,和new給出了一個指針;所以shared_ptr有一個帶指針參數的構造函數。但是,通常使用上面演示的make_shared函數更好,而不是自己搞亂new

+0

「通常」?對於沒有用'new'分配對象的'shared_ptr',是否有合法用途? – imreal

+3

@Nick:是的,如果你提供了一個除delete以外的刪除器。 –