我只是在函数内部创建Coordi对象的列表,如下所示。 Coordi是我定义的类对象。
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();
}
请让我知道释放所有分配的对象的最佳方法。
答案 0 :(得分:2)
编辑: 使用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();
我为一个混乱的回答道歉。我没有太多时间来使它整洁和正式。我希望无论如何都会有帮助。
上一个答案:
如果您的列表为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
中的对象没有移动或列表没有增长或缩小,请更好地使用对象列表,而不是指向对象的指针列表。有了这个,您不必担心分配和取消分配。如果list变量被销毁,该列表将为您完成。