gpt4 book ai didi

c++ - deleteLater() 在 qt 中是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:03 24 4
gpt4 key购买 nike

准系统示例:

Object * o = new Object(); //let's call this one object A on heap
o->deleteLater();
o = new Object(); //and let's call this one object B on heap

当我们进入事件循环时,deleteLater() 是要删除 A 还是 B?我想我的问题是,deleteLater() 是在调用时复制指针,还是在进入事件循环时删除指针持有的任何内容?

如果后者为真,我们如何 deleteLater() 一个我们需要重新初始化的指针?

最佳答案

QObject::deleteLater() 只是 QObject 的一个普通方法。您不能在指针上调用方法,只能在指针指向的对象上调用。所以 deleteLater() 在您调用 deleteLater() 时对指针变量 o 指向 (*o) 的对象进行操作。它无法知道您正在使用的局部指针变量 (o),这是您的私事。

要共享实际的指针变量,有必要通过 QObject**(指向 QObject 指针的指针;&o)将其传递到某处,而您不需要。

在 QObject::deleteLater() 中,该方法通过 this 指针引用它调用的对象,独立于引用同一对象的任何其他变量(例如 o )。

关于c++ - deleteLater() 在 qt 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com