在記憶體管理方面,指標之間有什么區別,哪個更好
void Loo(){
Song* pSong = new Song(…);
//…
string s = pSong->duration;
}
和
void Hoo(){
unique_ptr<Song> song2(new Song(…));
//…
string s = song2->duration;
}
uj5u.com熱心網友回復:
在第一種情況下,您需要呼叫delete自己并確保它發生在所有程式控制路徑上。
這說起來容易做起來難。delete pSong;在函式的右大括號之前撰寫并完成它是很誘人的。但是如果string s = song2->duration拋出例外會發生什么?(是的,這是可能的;例如 ifsong2->duration是一個定義了轉換運算子的型別,因此可以將其分配給string.)
使用std::unique_ptr,delete超出范圍時會為您呼叫。
盡管在這種特殊情況下Song song(...);可能更合適。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454251.html
下一篇:使用OOP在C 中添加矩陣
