C++ 我应该在使用QObject指针后删除它们吗?
在Qt5.7.0中使用指针后,我是否应该删除它们 例如,我得到了以下代码:C++ 我应该在使用QObject指针后删除它们吗?,c++,qt,C++,Qt,在Qt5.7.0中使用指针后,我是否应该删除它们 例如,我得到了以下代码: std::string login; std::string password; if (serviceId == 11) { QObject* loginField = this->parent()->findChild<QObject*>("wifiLogintxt1"); QObject* passwordField = this->parent()->findC
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();
}
std::字符串登录;
std::字符串密码;
if(serviceId==11){
QObject*loginField=this->parent()->findChild(“wifiLogintxt1”);
QObject*passwordField=this->parent()->findChild(“wifiPasswordtxt1”);
login=loginField->property(“text”).toString().tostString();
password=passwordField->property(“text”).toString().tostString();
}否则{
QObject*loginField=this->parent()->findChild(“inputField1”);
login=loginField->property(“text”).toString().tostString();
}
代码是否会导致内存泄漏,因为我们不删除
QObject
指针?不,您不应该删除这些对象,它们由其父对象QObject
管理,请参阅:
使用findChild
时,您将获得一个指向此父对象管理的同一对象的指针
因此,loginField
,passwordField
在其父窗口小部件被删除时被删除(在您的例子中是这个
实例)。如果删除它们,它们将从GUI中消失。您必须保留它们,直到父窗口小部件决定不再需要它们(即它被销毁时):
您也可以自己删除子对象,它们将从父对象中删除自己。例如,当用户删除工具栏时,可能会导致应用程序删除其中一个QToolBar对象,在这种情况下,工具栏的QMainWindow父对象将检测到更改并相应地重新配置其屏幕空间
不,您不应该删除这些对象,它们由其父对象管理,请参见: 使用
findChild
时,您将获得一个指向此父对象管理的同一对象的指针
因此,loginField
,passwordField
在其父窗口小部件被删除时被删除(在您的例子中是这个
实例)。如果删除它们,它们将从GUI中消失。您必须保留它们,直到父窗口小部件决定不再需要它们(即它被销毁时):
您也可以自己删除子对象,它们将从父对象中删除自己。例如,当用户删除工具栏时,可能会导致应用程序删除其中一个QToolBar对象,在这种情况下,工具栏的QMainWindow父对象将检测到更改并相应地重新配置其屏幕空间
不,不要删除QT中的那些指针。可能的重复指针应由其所有者删除。我假设父窗口小部件是
QObjects
变量的所有者。所以你们不应该删除它们。不,不要删除QT中的那个些指针。可能重复的指针应该被它们的所有者删除。我假设父窗口小部件是QObjects
变量的所有者。所以你不应该删除它们。想象一下当我们反复调用上面的代码时的情况。它将创建新的QObject*loginField
以便使用更多内存,对吗?不,loginField
将始终获得一个指针,指向父对象管理的同一对象(正如我在回答中所说的)。因此,不需要进行额外的分配。想象一下,当我们反复调用上面的代码时会出现什么情况。它将创建新的QObject*loginField
以便使用更多内存,对吗?不,loginField
将始终获得一个指针,指向父对象管理的同一对象(正如我在回答中所说的)。因此,没有进行额外的分配。