我有一个pyqtqwidget(objecta;它只是一个pasive容器),它包含几个子小部件(即,有Qt'ish的父子引用)。A的子部件是从另一个对象(对象B;不一定是Qt对象)引用的,该对象向A的子对象提供数据,并实际控制A的子控件的创建和结构。除了A的子对象外,对象B没有其他外部引用。对象A引用了对象B,因此,它是一个纯粹的循环引用的教科书示例。在
我想在某个时间点删除对象A和B的整个互连结构。我只需调用A.deleteLater()
,这是Qt对象的推荐。在我看来,它工作得很好,删除了A和B,因为它们没有外部引用,只有相互引用。。。但问题是,我不太确定它是否真的有效,如果它可以依赖它,它会在任何地方都起作用,如果有人将其分为B类,是否有任何危险。在
为了调试的目的,我想观察使用__del__
析构函数对A和B的正确销毁,该析构函数只会打印A was destroyed
之类的内容。但后来我在文档中了解到,当__del__
存在时,垃圾回收器不会使用循环引用收集此类对象。这是否意味着观察破坏会影响或取消销毁?如果我是对的,这看起来像是量子力学——观察者的存在会影响实验结果。在
所以基本上有两个问题:
使用deleteLater()
正确可靠吗?并且
在__del__
析构函数中打印消息是否会影响垃圾回收器?或者在调试过程中,我还能用什么方法来观察和确认破坏?
一种可能的方法是对对象使用weak reference,然后定期检查它是否已被垃圾回收(或强制垃圾回收)。下面是一个简单的例子:
相关问题 更多 >
编程相关推荐