QPointer是一个模板类,为QObject和继承QObject的对象提供了守卫指针(guarded pointers)。
我们不仅可以使用操作T*的方法来操作QPointer<T>,还可以借助QPointer<T>来判断指针指向的对象是否未被释放。
下面是 http://doc.qt.io/qt-5/qpointer.html 提供的示例:
//Qt提供的示例
QPointer<QLabel> label = new QLabel;
label->setText("&Status:");
...
if (label) //这里用label.isNull()也能判断指针是否被释放
label->show();
我还做了个实验:
QPointer<QObject> objPtr;
qDebug() << "objPtr.isNull() : " << objPtr.isNull();
objPtr = new QObject(); //创建一个对象
qDebug() << "objPtr.isNull() : " << objPtr.isNull();
delete objPtr; //释放对象
qDebug() << "objPtr.isNull() : " << objPtr.isNull();
结果:
objPtr.isNull() : true
objPtr.isNull() : false
objPtr.isNull() : true