![](/img/trans.png)
[英]auto and {}-lists question regarding Stroustrup C++ book
[英]Question regarding C++ Lists
列出狗 ............. ............
因此,我添加了許多狗對象。 如果我打電話給dog.pop_front();
內存會自動釋放嗎? 對於我彈出的對象?
所以如果我打電話
list<Dog*> dog2;
dog2.push_back(dog.front());
然后我會打電話給dog.pop_front()
那么這行得通嗎? 我將Dog作為類型struct。
Dog
對象的內存不會被刪除; 這你必須自己做。
但是, list
類會自動刪除Dog*
類型的指針的內存以及環繞在指針周圍的任何“列表節點”對象。
我建議使用list<shared_ptr<Dog> >
來刪除狗。
您一直在詢問以下順序:
list<Dog*> dog2;
dog2.push_back(dog.front()); // time 1
dog.pop_front(); // time 2
在時間1, dog2
和dog
都具有指向同一對象的指針。
在time2處,指向該對象的指針從dog
移除,並且僅在dog2
。
假設您最初使用new Dog
創建了該對象,則在您通過調用delete ptr
顯式釋放它之前,該對象將不會被釋放。
不。您仍然必須取消分配它。
不,您必須通過調用delete或free來自己取消分配它,具體取決於您如何分配它。
為號的內存Dog
對象不會被釋放。 您必須使用delete
運算符來取消分配它。
當您將Dog*
插入列表時,會創建一個指針副本並將其插入列表。 從列表中彈出時,釋放分配給該指針的內存。 分配給Dog對象的內存不會釋放,因為列表未分配該內存。 您必須自己釋放它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.