請原諒簡單的問題,但我無法理解指向集合的指針。共享指針向量
想象一下,我有個字節的這一載體:
vector<uint8_t> n;
我想這些信息存儲在一個共享的指針。爲什麼我需要(&)運算符的地址?
shared_ptr<vector<uint8_t>> m(&n);
我認爲構造函數會花費n
。但我也認爲我對這裏發生的事情有深刻的誤解:)
請原諒簡單的問題,但我無法理解指向集合的指針。共享指針向量
想象一下,我有個字節的這一載體:
vector<uint8_t> n;
我想這些信息存儲在一個共享的指針。爲什麼我需要(&)運算符的地址?
shared_ptr<vector<uint8_t>> m(&n);
我認爲構造函數會花費n
。但我也認爲我對這裏發生的事情有深刻的誤解:)
我想將它存儲在共享指針中。
不,你不知道。共享指針用於管理需要刪除的動態對象;這個向量不是用new
創建的,所以不能由(普通)共享指針管理。指針會試圖刪除它,造成混亂。爲什麼我需要地址的(&)運算符
auto m = make_shared<vector<uint8_t>>();
:
您要創建矢量動態,以便
shared_ptr
能夠正確地管理它?
由於共享指針(通常)用於管理與new
創建的對象,和new
給出了一個指針;所以shared_ptr
有一個帶指針參數的構造函數。但是,通常使用上面演示的make_shared
函數更好,而不是自己搞亂new
。
「通常」?對於沒有用'new'分配對象的'shared_ptr',是否有合法用途? – imreal
@Nick:是的,如果你提供了一個除delete以外的刪除器。 –
構造函數的參數應該是一個指針。 – Brian
我不想成爲那個人,但是......我認爲你的意思是錯誤理解。除非你真的害怕:p(我很快就會刪除這條評論) – keyser
錯誤的表達:錯誤的印象,錯誤的印象或不正確的理解,尤其是某種情況的本質或某人的意圖。 (儘管我把它改爲誤解,因爲我對英語不太好)。 –