Ars*_*ham 1 c++ qt memory-leaks
#include <QList>
class MyType{
//This has some data in it....
};
QList<MyType> f()
{
QList<MyType> list;
for(int i = 0; i<10; i++ )
{
MyType* item = new MyType();
list << *item;
}
return list;
}
QList<MyType> temp_var = f();
Run Code Online (Sandbox Code Playgroud)
当temp_var超出范围并销毁时,我们创建并添加到此列表的项目会发生什么?是否会有任何内存泄漏?
谢谢.
是的,会有内存泄漏.作为一般规则,你必须有一个delete为每个new在你的程序.
在您的特定情况下,错误的逻辑比temp_var破坏更早发生.您分配项目,然后在列表中存储这些项目的副本.你应该立即销毁原始的,不再有用的物品.
你的for循环可能是:
for(int i = 0; i<10; i++ )
{
MyType* item = new MyType(); // get me an item.
list << *item; // put copy of item in list
delete item; // destroy my item
}
Run Code Online (Sandbox Code Playgroud)
当这样表达时,很明显我们根本不应该使用new!
for(int i = 0; i < 10; i++)
{
MyType item;
list << item;
}
Run Code Online (Sandbox Code Playgroud)
假设MyType没有自己的任何内存管理错误,此版本不会泄漏.
QList<MyType*> f() // List of POINTERS
{
QList<MyType*> list;
for(int i = 0; i<10; i++ )
{
MyType* item = new MyType();
list << item; // Storing a POINTER
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
然后,是的,你会得到你预期的内存泄漏.QList不会自动提供delete指针类型.
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |