QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
Does QPointer::clear() delete its referenced pointer, or does "Clears this QPointer object." mean something else?
QPointer
有一个方法,clear()
。
清除此 QPointer 对象。
我不确定"清楚"到底是什么意思。在我看来,这可能意味着
- 它会删除您引用的指针。
或
- 它取消附加您引用的指针,将该指针保留在堆上,并且
QPointer<T>
对象不再绑定到任何指针。
也许这意味着别的东西?你能告诉我它实际上做了什么吗?
QPointer
是一个跟踪指针。它跟踪对象的生存期。它不做任何拥有职责。它永远不会解除分配QObject
拥有的任何存储。它可以释放底层实现细节 - 共享引用对象,但这不会影响用户真正关心的任何内容;仅当基础QObject
消失并且最后一个QPointer
被破坏时,才会释放这些对象。
它会删除您引用的指针。
恕我直言,这是一种相当令人困惑的语言。指针是值。引用指针具有明确的含义:
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
它取消附加您引用的指针,将该指针保留在堆上,并且
QPointer<T>
对象不再绑定到任何指针。
它肯定有很多指针,但这是名副其实的goobledygook。仅仅因为我可能理解你的意思并不意味着任何人都应该这样说话:)
QPointer<T>
跟踪T
实例(对象(的生存期。它是它跟踪的对象,而不是指针。因此,clear()
使QPointer
不跟踪它所跟踪T
类型的任何对象。就这样。这就是在不让每个人都怀疑自己的理智的情况下如何说:)
的确,您QPointer
跟踪对象的方式是通过原始指针指向它。这就是你如何让QPointer
运转,仅此而已。
将QPointer
与堆混为一谈是不正确的 - 下面的示例中不涉及堆,至少没有明确涉及。obj
实例是一个自动变量。实现可以自由地将其放在某种动态存储中 - 甚至是字面上的堆,但这C++解释器的典型特征,而不是我们通常习惯:)
#include <QtCore>
int main() {
QPointer<QObject> p;
Q_ASSERT(p.isNull());
{
QObject obj;
p = &obj;
Q_ASSERT(!p.isNull());
}
Q_ASSERT(p.isNull());
}
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- C++调用具有 *this 属性的单个帮助程序函数
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- QObject::连接无法将信号连接到*this*对象的插槽
- 析构函数中的"delete this"
- 为什么成员函数内的"this"指针为空?
- 为什么我需要在转换构造函数上引用 this->?
- "this"指针的值在对象的生存期内是否恒定?
- C++ "Invalid use of 'this' in non-member function" ,
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?