gpt4 book ai didi

c++ - QPointer::clear() 是否删除其引用的指针,或者 "Clears this QPointer object."是否有其他含义?

转载 作者:行者123 更新时间:2023-11-30 01:37:00 30 4
gpt4 key购买 nike

QPointer有一个方法, clear() .

Clears this QPointer object.

我不确定“清晰”的确切含义。在我看来,这可能意味着

  1. 它会删除您引用的指针。

  1. 它取消附加您引用的指针,将该指针留在堆上,QPointer<T>对象不再绑定(bind)到任何指针。

也许还有别的意思?你能告诉我它的实际作用吗?

最佳答案

QPointer是一个跟踪指针。它跟踪对象的生命周期。它不承担任何拥有责任。它永远不会释放 QObject 拥有的任何存储空间。 .它可以释放底层实现细节——共享引用对象,但这不会影响用户真正关心的任何事情;这些对象只有在底层 QObject消失了,最后QPointer正在被破坏。

It deletes the pointer you referenced.

恕我直言,这是一种相当令人困惑的语言。指针是值。 引用指针具有明确的含义:

const int *q = ....; // a pointer
*q; // a pointer dereference (not used for anything)

对我来说,“删除指针”是这样的:

// dynamically allocate a pointer
int **p = new int*();
// make it point somewhere
int i = {};
assert(0 == i);
*p = &i;
// use it
**p = 44;
assert(44 == i);
// delete it
delete p; // a pointer-to-integer got deleted

It un-attaches the pointer you referenced, leaving that pointer on the heap, and the QPointer<T> object no longer tied to any pointer.

肯定是大量的指针,但那是名副其实的 goobledygook。仅仅因为我可能理解你的意思并不意味着任何人都应该那样说话:)

A QPointer<T>跟踪 T 的生命周期-实例,一个对象。它跟踪的是对象,而不是指针。所以clear()使 QPointer不跟踪 T 类型的任何对象它正在跟踪。就这样。这就是如何说出来而不会让每个人都怀疑他们的理智:)

的确,您制作 QPointer 的方式跟踪一个对象是通过一个原始指针指向它。这就是您获得 QPointer 的方式去,就这样。

混淆QPointer是不正确的使用堆 - 下面的示例中不涉及堆,至少没有明确涉及。 obj instance 是一个自动变量。实现可以自由地将它放在某种动态存储上——甚至是文字堆,但这是 C++ 解释器的典型做法,而不是我们通常习惯的做法:)

#include <QtCore>
int main() {
QPointer<QObject> p;
Q_ASSERT(p.isNull());
{
QObject obj;
p = &obj;
Q_ASSERT(!p.isNull());
}
Q_ASSERT(p.isNull());
}

关于c++ - QPointer::clear() 是否删除其引用的指针,或者 "Clears this QPointer object."是否有其他含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50649514/

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