c++ - Qt“函数/方法”中在堆栈上创建对象是如何工作的?
问题描述
例如,我有我经常看到的代码:
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% 确定那里没有使用动态内存分配,我不明白如何确定是否可以在堆栈(方法/函数)上使用对象。
也许它更正确?但是为什么经常像第一个版本那样写。
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;
}
解决方案
对于“someHash”,析构函数也会自动调用吗?
class SomeClass : public QObject
{
Q_OBJECT
public:
QHash<QString,QString> someHash;
};
推荐阅读
- single-sign-on - 在 Windows 和 Linux 上使用 Kerberos 进行 SSO
- xcode - Cocoapods 安装后没有源文件
- api - Telegram 使用可点击的 bot 命令发送消息
- go - ContentDisposition 类来构建文件内容配置
- javascript - 如何使用添加方法 Extjs 组件到另一个 Extjs 组件(moderntoolkit)
- android - 从 Activity 向广播接收器发送附加信息
- c# - 无论如何要隐藏行 ID 列
- python - 我如何使用 Pygame get_size()?
- html - HTML中的Button元素是什么
- flask - 从 QuerySelectField 中删除重复项