Qt中的智能指针
文章目錄
- 1 Qt中的智能指針
- 1.1 QPointer
- 1.2 QSharedPointer
- 1.3 Qt中的其它智能指針
1 Qt中的智能指針
1.1 QPointer
QPointer:
- 當其指向的對象被銷毀時,它會被自動置空。
- 析構時不會自動銷毀所指向的對象。
注意:
QPointer要求所指向的對象必須繼承于QObject,底層實現是維護了一個哈希表,具體的細節暫時不進行深入研究。QPointer對象可以和NULL進行直接比較,是因為實現了類型轉換函數,如下:operator T * () const。
1.2 QSharedPointer
QSharedPointer:
- 引用計數型智能指針。
- 可以被自由的拷貝和賦值。
- 當引用計數為0時才刪除指向的對象。
編程實驗:Qt中的智能指針
#include <QPointer> #include <QSharedPointer> #include <QDebug>class Test : public QObject {QString m_name; public:Test(const char* name){qDebug() << "Hello, " << name << ".";m_name = name;}void print(){qDebug() << "I'm " << m_name << ".";}~Test(){qDebug() << "Goodbye, " << m_name << ".";} };int main() {QPointer<Test> pt(new Test("D.T.Software"));QPointer<Test> pt1(pt);QPointer<Test> pt2(pt);pt->print();pt1->print();pt2->print();delete pt;qDebug() << "pt = " << pt;qDebug() << "pt1 = " << pt1;qDebug() << "pt2 = " << pt2;qDebug() << endl;QSharedPointer<Test> spt(new Test("Delphi Tang"));QSharedPointer<Test> spt1(spt);QSharedPointer<Test> spt2(spt);spt->print();spt1->print();spt2->print();return 0; }1.3 Qt中的其它智能指針
參考資料:
總結
- 上一篇: 事件的等待与通知
- 下一篇: 烤炉鸡蛋灌饼叫啥名字?