C++ QPointer::clear()是否删除其引用的指针,或者;清除此QPointer对象。”;还有别的意思吗?
C++ QPointer::clear()是否删除其引用的指针,或者;清除此QPointer对象。”;还有别的意思吗?,c++,qt,pointers,heap,qpointer,C++,Qt,Pointers,Heap,Qpointer,QPointer有一个方法 清除此QPointer对象 我不知道“清楚”到底是什么意思。在我看来,这可能意味着 它删除您引用的指针 或 它取消附加您引用的指针,将该指针留在堆上,并且QPointer对象不再绑定到任何指针 也许是别的意思?您能告诉我它的实际功能吗?QPointer是一个跟踪指针。它跟踪对象的生存期。它不承担任何责任。它永远不会解除分配QObject拥有的任何存储。它可以取消分配底层实现细节——共享引用对象,但这并不影响用户真正关心的任何事情;只有当基础QObject消失并且最后一
QPointer
有一个方法
清除此QPointer对象
我不知道“清楚”到底是什么意思。在我看来,这可能意味着
QPointer
对象不再绑定到任何指针也许是别的意思?您能告诉我它的实际功能吗?
QPointer
是一个跟踪指针。它跟踪对象的生存期。它不承担任何责任。它永远不会解除分配QObject
拥有的任何存储。它可以取消分配底层实现细节——共享引用对象,但这并不影响用户真正关心的任何事情;只有当基础QObject
消失并且最后一个QPointer
被销毁时,才会解除分配这些对象
它删除您引用的指针
那是一种相当令人困惑的语言。指针是值。引用指针具有明确的含义:
const int *q = ....; // a pointer
*q; // a pointer dereference (not used for anything)
对我来说,“删除指针”是这样的:
它取消附加您引用的指针,将该指针留在堆上,并且QPointer
对象不再绑定到任何指针
确实有很多指针,但那是名副其实的傻瓜。我可能理解你的意思,但这并不意味着任何人都应该这样说:)
QPointer
跟踪T
实例的生存期,即对象的生存期。它是对象,而不是指针。因此clear()
使QPointer
不跟踪它跟踪的T
类型的任何对象。这就是全部。这就是在不让每个人怀疑自己是否理智的情况下说的:)
确实,使QPointer
跟踪对象的方法是通过原始指针指向对象。这就是如何让QPointer
运行的,仅此而已
将QPointer
与heap混为一谈是不正确的-下面的示例中没有涉及heap,至少没有明确涉及。obj
实例是一个自动变量。实现可以自由地把它放在某种动态存储上——甚至是一个字面堆,但这是C++解释程序的典型,而不是我们通常习惯的:)/P>
#包括
int main(){
QPointer p;
Q_断言(p.isNull());
{
对象对象;
p=&obj;
Q_断言(!p.isNull());
}
Q_断言(p.isNull());
}
// 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
#include <QtCore>
int main() {
QPointer<QObject> p;
Q_ASSERT(p.isNull());
{
QObject obj;
p = &obj;
Q_ASSERT(!p.isNull());
}
Q_ASSERT(p.isNull());
}