Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该在使用QObject指针后删除它们吗?_C++_Qt - Fatal编程技术网

C++ 我应该在使用QObject指针后删除它们吗?

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

在Qt5.7.0中使用指针后,我是否应该删除它们

例如,我得到了以下代码:

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
将始终获得一个指针,指向父对象管理的同一对象(正如我在回答中所说的)。因此,没有进行额外的分配。