如何在自删除后将对象设置为nullptr
How to set object to nullptr after self deletion
我有一个对话框窗口,其中有一个QDialog类。我在头文件中声明:
MyDialogClass myDialogWindow = nullptr;
并用在运行时的某个地方创建窗口
myDialogWindow = new MyDialogClass(this);
它也是delf破坏,因为它的属性:
this->setAttribute(Qt::WA_DeleteOnClose);
现在有人知道我如何在没有连接信号的情况下自删除后将myDialogWindow指针设置为nullptr吗?
提前谢谢。
如果没有一些信号或事件逻辑,这是不可能的。对象不拥有指针,指针指向对象。
但是,您可以使用QPointer来为您封装信号处理和调零。
QPointer<MyDialogClass> myDialogWindow;
myDialogWindow = new MyDialogClass(this);
myDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
// some time later, check dialog has not been closed
if( ! myDialogWindow.isNull() )
{
// do something with dialog
}
您可以捕捉对象何时被销毁,并擦除指针。
connect(myDialogWindow, &QObject::destroyed, [&myDialogWindow](){ myDialogWindow = nullptr;});
一般情况下不能这样做。任何T
都无法知道它是用作T
还是用作T&
或T*
,并且您也无法从T
内部自动将所有相关的T*
更改为nullptr
(因为它不知道它们(。
您需要其他方式来通知您的MyDialogClass
实例已被销毁,例如一个信号。
相关文章:
- 如何在自删除后将对象设置为nullptr
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- std::用派生类对象设置,但用gcc8.1设置基类比较器
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- 如何将C++ time_t对象设置为纪元?
- 使用PYBIND11,如何为Array_t对象设置基础内存的所有权
- 如何使用基类对象设置派生类变量的值
- C 不能将对象设置为方法的返回对象
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 无法在openGL和GLUT中为我想要的确切对象设置动画
- 如何将2D向量中的对象设置为空指针[C ]
- 如何用类别的consumetrized构造函数声明使用类的比较对象设置的STL设置
- 为什么重载运算符不将主对象设置为值集
- 如何在 OpenGL 中为 3D 对象设置原点
- C++是否可以将fstream对象设置为在每次调用<<
- 如何从C#将对象设置为C++
- 哪个更好?如果子对象是类的成员,则为子对象设置父对象
- c++无法为包含静态变量的对象设置NULL指针
- 将数组中的对象设置为新对象
- 在OpenGL中为不同的对象设置单独的材质属性