這可能是一個愚蠢的問題,但我只是不確定答案。下面的代碼讀取一個文件,並且對於文件的每一行,智能指針由「new」創建。如果將來使用智能指針,它將被存儲在一個列表中,否則不會被存儲。我應該手動刪除智能指針嗎?
我的問題是:如果智能指針沒有存儲,會導致潛在的內存泄漏?謝謝。
int main(){
.....;
std::list<SomeClass> aList;
while(inFile >> ss){
std::tr1::shared_ptr<SomeClass> aPtr(new SomeClass());
//do something in foo(aPtr) to aPtr,
//if aPtr will be used later, then it's stored in aList
//otherwise, it's not stored
foo(aPtr);
}
.....;
}
術語「刪除」在任何情況下都是不幸的。對於智能指針,該操作稱爲「重置」。即在這種情況下,你可以寫'aPtr.reset();'。但你很少需要這個;通常在智能指針引用另一個對象時使用它:'aPtr.reset(new SomeClass(「Another Object」));' – MSalters