在Qt 5.7.0中使用后,我应该删除QObject
指针吗?
例如,我有代码:
std::string login;
std::string password;
if (serviceId == 11) {
QObject* loginField = this->parent()->findChild<QObject*>("wifiLogintxt1");
QObject* passwordField = this->parent()->findChild<QObject*>("wifiPasswordtxt1");
login = loginField->property("text").toString().toStdString();
password = passwordField->property("text").toString().toStdString();
} else {
QObject* loginField = this->parent()->findChild<QObject*>("inputField1");
login = loginField->property("text").toString().toStdString();
}
代码是否会导致内存泄漏,因为我们不会删除QObject
指针?
答案 0 :(得分:3)
不,您不应删除这些对象,它们由其父QObject
管理,请参阅QObject trees and ownership:
使用findChild
时,您将获得指向此父级管理的同一对象的指针。
因此,删除其父窗口小部件时会删除loginField
,passwordField
(在您的情况下为this
实例)。如果删除它们,它们将从GUI中消失。您必须保留它们,直到父窗口小部件决定不再需要它们(即它被销毁的时间):
您也可以自己删除子对象,并将自己从父母身上删除。例如,当用户删除工具栏时,可能会导致应用程序删除其中一个QToolBar对象,在这种情况下,工具栏的QMainWindow父级会检测到更改并相应地重新配置其屏幕空间。