QPointer
QPointer 是一种受掩护的指针,当其引用的对象被烧毁时,它会被自动清除(但是,烧毁引用对象还是必须手动delete)。QPointer所指向的对象必须是QObject或其派生类对象。
当多个指针指向同一个 Object 对象时,引用的对象可能被释放掉,这时使用 QPointer 就可以安全的测试引用对象是否有效,防止发生指针空悬。
注意:Qt5 之前,QPointer 指向一个 QWidget 对象(或子类对象)时,QPointer 由 QWidget 的析构函数清除,Qt5 之后 由 QObject 的析构函数清除。在析构函数烧毁被跟踪 QWidget 的子项之前,任何跟踪 QWidget 的 QPointers 都不会被清除。
QPointer 提供的函数和运算符与平凡指针的函数和运算符雷同,但算术运算符+、-、 ++ 和 --除外(它们通常仅用于对象数组)。
创建 QPointer 指针,可以使用构造函数、用 T * 赋值或雷同类型的其他 QPointer 。QPointer 比力可以使用 == 和 !=,或使用 isNull() 进行测试。可以使用 nullptr 或 *xx->member 取消引用。
QPointer 和平凡指针可以混用,QPointer会自动转换为指针*。可以把 QPointer 对象传递给需要 QWidget * 参数的函数。因此,声明函数时没有必要用 QPointer 作为参数,只需使用平凡指针即可。
[code]#include #include #include int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QTimer *timer = new QTimer; // QPointer timer = new QTimer; delete timer; // 不使用QPointer时需要设置timer为NULL // timer=NULL; if(timer) { qInfo() |