簡體   English   中英

有關C ++列表的問題

[英]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, dog2dog都具有指向同一對象的指針。

在time2處,指向該對象的指針從dog移除,並且僅在dog2

假設您最初使用new Dog創建了該對象,則在您通過調用delete ptr顯式釋放它之前,該對象將不會被釋放。

不。您仍然必須取消分配它。

不,您必須通過調用delete或free來自己取消分配它,具體取決於您如何分配它。

為號的內存Dog對象不會被釋放。 您必須使用delete運算符來取消分配它。

當您將Dog*插入列表時,會創建一個指針副本並將其插入列表。 從列表中彈出時,釋放分配給該指針的內存。 分配給Dog對象的內存不會釋放,因為列表未分配該內存。 您必須自己釋放它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM