-
玩C++的人都喜欢用指针,比如下面的代码:
QLabel* label = new QLabel;
QLabel* label2 = label;
label->setText("&Status:");
......
delete label2;
label2 = 0;
......
if (label)
label->show();
上面用label的时候,即使我们用判断了label, 也不保险,因为在中间label指向的对象已经被delete,所以程序挂掉,尝试使用一个野指针。
但是若使用
QPointer<QLabel> label = new QLabel;
QPointer<QLabel> label2 = label;
当使用label2删除对象时,指向同一个对象的QPointer<QLabel>指针都会得到通知,并值变为0;这样,上面的代码可以安全运行。
当然QPointer的使用也是有前提的,只能用于QObject对象,是否值得付出QObject的性能和内存来换取指针的安全,那我就不得而知了,不过大部分的情况下,适合对性能影响不大。
QT鲜为人知的工具类之QPointer
最新推荐文章于 2023-06-09 16:16:10 发布