通常建议在Qt中使用deleteLater()
代替普通delete
。但是,它会导致悬挂对象的问题:它们被标记为删除但仍出现在Qt API返回的子列表中。 (由于这种行为严重违反直觉,我快速发展的Qt怪癖让我验证了它。他们这样做。)那么,有没有一种惯用的方法来跟踪这些对象?当然,我可以使用像
class DeleteLaterable
{
public:
void markForDeletion() { mMarked = true; }
bool isMarked() const { return mMarked; }
private:
bool mMarked = false;
};
并公开继承它的一切,但它打开了一整套不同的虚拟继承蠕虫。有更好的想法吗?