c++ - Qt : is good in a c++ class to have a widget field not declared as a pointer

标签 c++ qt

class Foo : public QMainWindow
{
    MyWidget  *alertDlg_; 
    MyWidget   alertDlg2_; 
};

第二场会很危险吗?

谢谢

编辑: 问题示例:

{
    QPushButton button("button"); 
    QWidget widget;
    button.setParent(&widget);
} // crash 

最佳答案

是的,因为 Qt 有它自己的内存管理,如果 alertDlg2_ 有父级,你会得到双重删除。

您可以在 this article 中阅读更多关于 qt 对象树和所有权的信息.您可以在其中看到,执行您在编辑示例中所做的操作是不安全的。这就是您遇到崩溃的原因。

关于c++ - Qt : is good in a c++ class to have a widget field not declared as a pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447235/

相关文章:

c++ - 模棱两可的重载函数仅参数的模板参数不同

C++ 密码尝试限制

c++ - 如何使用 Armadillo 或特征库获得稀疏矩阵的特征分解?

QTextEdit 和类似 bash 的彩色输出仿真

c++ - Qt - 从 C++ 线程发出信号

c++ - #pragma once 进入头守卫的原因是什么?

c++ - OpenSceneGraph 无法启动,因为缺少 osg80-osgd.dll

qt - QStandardItemModel -- 删除一行

c++ - 从不同线程中的 QFile 读取

python - QAction 触发信号未传递检查参数