例如,我有经常看到的代码:
class SomeClass : public QObject
{
Q_OBJECT
public:
QHash *parameterTable;
explicit ExCurrentSession(QObject *parent = nullptr);
};
SomeClass::SomeClass(QObject *parent) : QObject(parent)
{
parameterTable = new QHash;//used dynamic creation
QFile file("someFile.txt");//Creating an object on the stack
if (!file.open(QIODevice::ReadOnly|QIODevice::WriteOnly))
QTextStream fileSream(&file);//Creating an object on the stack
QString buff = fileSream.readLine();//Creating an object on the stack
//...Other code to set the QHash table with a parameter and a value from a file...
}
问题是退出该方法后是否会发生内存泄漏:
-QFile文件?我不知道使用动态内存的里面是什么,也许那里没有使用。如果在该类的另一个子类中使用它。
-QTextStream fileSream吗?我不知道使用动态内存的对象内部是否存在,也许在那里不使用。如果在该类的另一个子类中使用它。
-QString buff?我不知道使用动态内存的对象内部是否存在,也许在那里没有使用。
我不明白如何确定是否可以在堆栈上使用对象(方法/函数),如果您自己没有编写该对象,并且不确定100%确保在那里不使用动态内存分配。 / p>
也许更正确?但是为什么经常像第一个版本那样写。
SomeClass::SomeClass(QObject *parent) : QObject(parent)
{
parameterTable = new QHash;//used dynamic creation
QFile *file = new QFile("someFile.txt");//Creating an object on the stack
if (!file->open(QIODevice::ReadOnly|QIODevice::WriteOnly))
QTextStream *fileSream = new QTextStream(file);//Creating an object on the stack
QString *buff = fileSream->readLine();//Creating an object on the stack
//...Other code to set the QHash table with a parameter and a value from a file...
delete file;
delete fileSream;
delete buff;
}
答案 0 :(得分:0)
对于“ someHash”,析构函数也会自动调用吗?
class SomeClass : public QObject
{
Q_OBJECT
public:
QHash<QString,QString> someHash;
};