通常当我删除一个对象时,我将其设置为零。这有助于我编写我的例程以检查对象是否为零然后继续。
但是,如果我使用deleteLater()
功能,我就失去了对它的控制权。我不知道它是否是一个有效的项目,或者我是否需要创建一个新项目。我找到的解决方案只是分别跟踪状态,但是有更好的方法吗?
答案 0 :(得分:19)
如果您在对象上调用deleteLater()
然后将指针设置为nullptr
,则没有任何错误。 Qt框架将安全地为您删除该对象。
作为替代方案,您还可以连接到已销毁的信号,以获得对象销毁的通知,并将指针设置为该插槽中的nullptr
。
答案 1 :(得分:9)
如果要删除的对象是QObject,则可以使用QPointer。这会将其设置为NULL。
答案 2 :(得分:4)
你是说,“把指针归零”?在C ++中,比在Java中更重要的是区分对象和指向它的指针。在这里,它尤其重要,因为如果你将对象归零,它的析构函数将无法工作。如果你将指针归零到没有问题,因为Qt会添加另一个指向“要删除的对象”列表的指针。