如何删除列表中的动态分配类对象<T>?

How to delete dynamic allocated class object in list<T>?

本文关键字:对象 lt 动态分配 gt 何删除 删除 列表      更新时间:2023-10-16

i仅创建函数内部的坐标对象列表。坐标是我定义的类对象。

list<Coordi> LstOfCoordi;
for (int i = 0; i < 10; ++i)
{
    Coordi *tmp = new Coordi();
    LstOfCoordi.push_back(tmp);
} 

我想在程序终止之前将列表和每个对象释放到系统。

如果必须发布列表的每个元素,则如何处理?我试图在下面的代码下使用删除每个代码,但这导致了编译错误。

for (int i = 0; i < 10; ++i)
{
    myClass tmp = LstOfMyCalss.back();
    delete &tmp;
    LstOfMyClass.pop_back();
} 

所以,我想知道列表中的删除是否足够。一目了然地使用以下代码,每个元素被分配,并且在列表被销毁时未正确释放。

for (int i = 0; i < 10; ++i)
{
    //myClass tmp = LstOfMyCalss.back();
    //delete &tmp;
    LstOfMyClass.pop_back();
} 

请让我知道发布所有分配对象的最佳方法。

编辑:使用std :: list。

创建对象列表的示例代码
class MyClass {
public:
    std::list<Coordi> m_listCoordi;
}
//---creation of list of objects
for(int a = 0; a < numObjects; a++){
    m_listCoordi.push_back(Coordi());  //note: no 'new' is used.
}
//---destroying list of objects
m_listCoordi.clear();

使用std :: list。创建指向对象指针的示例代码。

class MyClass {
public:
    std::list<Coordi*> m_listCoordi;  //<---note: now list of pointer
}
//---creation of list of objects
for(int a = 0; a < numObjects; a++){
    m_listCoordi.push_back(new Coordi());
}
//---destroying list of objects
for(int a = 0; a < numObjects; a++){
    delete m_listCoordi[a];  //note: an item in m_listCoordi is already a pointer.
}
m_listCoordi.clear();

我为一个混乱的答案道歉。我没有太多时间使它变得干净,更正式。我希望无论如何都会有所帮助。


prev答案:

如果您的列表为std::vector<YourClass*>,则元素保存指针值。从列表中保存的指针值分配和处理内存块是您的责任。无论您分配/交易的方法是什么,都取决于您。只需确保您的代码不会产生内存泄漏即可。

//---deallocate all elements before clearing the list.
for(auto& pItem : LstOfMyClass){  
    //note: since LstOfMyClass is a list of pointer values, pItem is a pointer variable.
    delete pItem;
}
//---clear the list.
LstOfMyClass.clear();

如果LstOfMyClass中的对象不会四处移动或列表不会生长或收缩,请更好地使用对象列表而不是指向对象的指针列表。因此,您不必担心分配和交易。如果列表变量被销毁,列表将为您完成。