QPointer的使用

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::shared_ptr和QPointer是两种不同的智能指针。 std::shared_ptr是C++11标准库提供的智能指针,用于解决C++中的内存泄漏问题。它通过自动释放内存来避免手动管理内存的问题。下面是一个示例程序: ``` #include <memory> #include <iostream> class MyClass { public: void print() { std::cout << "Hello, World!\n"; } }; int main() { std::shared_ptr<MyClass> ptr(new MyClass); ptr->print(); return 0; } ``` 在这个例程中,我们创建了一个名为ptr的std::shared_ptr指针,它指向MyClass类的对象。当使用完这个对象后,我们不需要手动删除它,因为std::shared_ptr会自动释放这个对象的内存。 QPointer是Qt框架提供的智能指针,用于解决Qt中的内存泄漏问题。和std::shared_ptr一样,它也可以自动释放内存,但它在释放内存时会检查指针是否仍然有效。下面是一个示例程序: ``` #include <QCoreApplication> #include <QPointer> #include <QDebug> class MyClass : public QObject { Q_OBJECT public: MyClass(QObject* parent = nullptr) : QObject(parent) {} void print() { qDebug() << "Hello, World!"; } }; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QPointer<MyClass> ptr = new MyClass(&app); ptr->print(); return app.exec(); } ``` 在这个例程中,我们创建了一个名为ptr的QPointer指针,它指向MyClass类的对象。当使用完这个对象后,我们不需要手动删除它,因为QPointer会自动释放这个对象的内存。此外,当我们在释放内存时,QPointer会检查指针是否仍然有效。如果指针已经失效,那么QPointer不会进行释放操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值