如何删除列表中的动态分配类对象<T>?
How to delete dynamic allocated class object in list<T>?
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
中的对象不会四处移动或列表不会生长或收缩,请更好地使用对象列表而不是指向对象的指针列表。因此,您不必担心分配和交易。如果列表变量被销毁,列表将为您完成。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 如何在自删除后将对象设置为nullptr
- C++是否可以将fstream对象设置为在每次调用<<
- 如何显示/打印字符串对象?cout & lt; & lt;Int工作,count <<字符串