如何让QObject :: deleteLater()将对象归零?

时间:2011-05-23 10:27:51

标签: c++ qt memory-management qobject

通常当我删除一个对象时,我将其设置为零。这有助于我编写我的例程以检查对象是否为零然后继续。

但是,如果我使用deleteLater()功能,我就失去了对它的控制权。我不知道它是否是一个有效的项目,或者我是否需要创建一个新项目。我找到的解决方案只是分别跟踪状态,但是有更好的方法吗?

3 个答案:

答案 0 :(得分:19)

如果您在对象上调用deleteLater()然后将指针设置为nullptr,则没有任何错误。 Qt框架将安全地为您删除该对象。

作为替代方案,您还可以连接到已销毁的信号,以获得对象销毁的通知,并将指针设置为该插槽中的nullptr

答案 1 :(得分:9)

如果要删除的对象是QObject,则可以使用QPointer。这会将其设置为NULL。

答案 2 :(得分:4)

你是说,“把指针归零”?在C ++中,比在Java中更重要的是区分对象和指向它的指针。在这里,它尤其重要,因为如果你将对象归零,它的析构函数将无法工作。如果你将指针归零到没有问题,因为Qt会添加另一个指向“要删除的对象”列表的指针。