我想了解unique_ptr,但他們讓我有點難住。 考慮下面的代碼:爲什麼將原始指針投射到unique_ptr不會刪除原始文件?
PartClass * part= new PartClass;
//The OwnerClass is a composite that excpects a unique_ptr
OwnerClass * owner = new OwnerClass(unique_ptr<PartClass>(part);
的代碼,我希望原來的指針第二行後 - 部分 - 已被刪除。畢竟,只要你有一個unique_ptr,它就會產生很多大驚小怪,需要被移動等。爲什麼編譯器允許一個原始指針仍然訪問部分對象呢?它不違反unique_ptr的整個概念嗎?
'part'不會被刪除,因爲所有權將被移動到'OwnerClass'中,假設'OwnerClass'將其存儲在某個地方。那是你所困惑的嗎? – TartanLlama
「那麼爲什麼編譯器允許一個原始指針仍然訪問部分對象?是不是違反了unique_ptr的整個概念?」它是一個自由的世界(更像是編譯器),你可以'刪除';如果你喜歡,編譯器不會問你的意圖,如果你想除以零他不會阻止你,這取決於你決定如果你想使用原始指針或正確的'unique_ptr',這裏沒有'laws',有時候你可能想要做一個破解並使用raw .. – Vladp
你似乎對指針有很大的誤解,如果'unique_ptr '會刪除'part',他將如何使用它?如果你談論的是「part」它自己而不是它的引用內容,那麼它就被分配到這個範圍的棧中,並且在你離開範圍時將被刪除。 – Vladp