最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ QT智能指針的使用詳解

 更新時(shí)間:2023年12月30日 10:36:55   作者:我不是程序猿兒  
這篇文章主要介紹了C++ QT智能指針的使用,Qt是一個(gè)跨平臺(tái)的C++框架,主要用來開發(fā)圖形用戶界面程序,也可以開發(fā)不帶界面的命令行程序,下面我們來了解QT智能指針是如何使用的

C++標(biāo)準(zhǔn)庫(kù)中的三種智能指針

std::shared_ptr:使用引用計(jì)數(shù),每一個(gè)shared_ptr的拷貝都指向相同的內(nèi)存,每次拷貝都會(huì)觸發(fā)引用計(jì)數(shù)+1,每次生命周期結(jié)束析構(gòu)的時(shí)候引用計(jì)數(shù)-1,在最后一個(gè)shared_ptr析構(gòu)的時(shí)候,內(nèi)存才會(huì)釋放。

std::weak_ptr:用來監(jiān)視shared_ptr的生命周期,它不管理shared_ptr內(nèi)部的指針,它的拷貝析構(gòu)都不會(huì)影響引用計(jì)數(shù),純粹是作為一個(gè)旁觀者監(jiān)視shared_ptr中管理的資源是否存在,可以用來返回this指針和解決循環(huán)引用問題。

std::unique_ptr:獨(dú)占型的智能指針,它不允許其它智能指針共享其內(nèi)部指針,也不允許unique_ptr的拷貝和賦值。

Qt中的智能指針

QPointer,提供了指向QObject的保護(hù)指針

QPointer只能用于指向QObject及派生類的對(duì)象。當(dāng)一個(gè)QObject或派生類對(duì)象被刪除后,QPointer能自動(dòng)    將其內(nèi)部的指針設(shè)置為0,這樣在使用QPointer之前就可以判斷一下是否有效。QPointer對(duì)象超出作用域時(shí),并不會(huì)刪除它指向的內(nèi)存對(duì)象。

  • QScopedPointer,和std::unique_ptr其概念是一樣的
  • QSharedPointer,和std::shared_ptr其作用是一樣的
  • QWeakPointer,和std::weak_ptr功能是一樣的

一些名詞:空指針,野指針,垂懸指針,無效指針

  • 空指針:指針值為NULL nullptr 0
  • 野指針:指針未初始化地址
  • 垂懸指針:指向已刪除(或釋放)的內(nèi)存位置的指針稱為懸空指針
  • 無效指針:指針指向內(nèi)存的類型為void*,是一種特殊類型指針

使用Qt智能指針的設(shè)計(jì)需求通常涉及到以下幾個(gè)方面:

  • 自動(dòng)內(nèi)存管理: 你希望確保在對(duì)象不再需要時(shí)能夠自動(dòng)釋放其內(nèi)存,避免內(nèi)存泄漏。
  • 對(duì)象所有權(quán)的傳遞: 你希望在對(duì)象的所有權(quán)傳遞給其他部分時(shí),能夠方便地管理對(duì)象的生命周期。
  • 對(duì)象的共享所有權(quán): 你希望多個(gè)部分能夠共享同一個(gè)對(duì)象,而不需要手動(dòng)跟蹤引用計(jì)數(shù)或手動(dòng)釋放內(nèi)存。
  • 異常安全: 你希望在發(fā)生異常時(shí)能夠安全地釋放資源,而不會(huì)導(dǎo)致資源泄漏。

示例:圖形界面應(yīng)用中的資源管理

一個(gè)圖形界面應(yīng)用,其中有一個(gè)文檔對(duì)象,而文檔對(duì)象中包含多個(gè)圖形對(duì)象。每個(gè)圖形對(duì)象可能有自己的資源,例如圖像數(shù)據(jù)。你希望確保在文檔對(duì)象或圖形對(duì)象不再需要時(shí),相關(guān)的資源能夠被正確釋放。

#include <QSharedPointer>
#include <QScopedPointer>
#include <QDebug>
// 假設(shè)的圖形對(duì)象類
class GraphicObject {
public:
    GraphicObject() { qDebug() << "GraphicObject created"; }
    ~GraphicObject() { qDebug() << "GraphicObject destroyed"; }
    // 具體的圖形對(duì)象操作
};
// 文檔對(duì)象類
class Document {
public:
    Document() { qDebug() << "Document created"; }
    ~Document() { qDebug() << "Document destroyed"; }
    // 添加圖形對(duì)象到文檔
    void addGraphicObject(QSharedPointer<GraphicObject> graphicObject) {
        graphicObjects.append(graphicObject);
    }
    // 具體的文檔操作
private:
    QList<QSharedPointer<GraphicObject>> graphicObjects;
};
int main() {
    // 使用 QSharedPointer 確保圖形對(duì)象的自動(dòng)釋放
    QSharedPointer<GraphicObject> graphicObject(new GraphicObject);
    // 使用 QScopedPointer 確保文檔對(duì)象的自動(dòng)釋放
    QScopedPointer<Document> document(new Document);
    // 將圖形對(duì)象添加到文檔
    document->addGraphicObject(graphicObject);
    // 注意:在這里,graphicObject 和 document 會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)釋放
    return 0;
}

Document 類包含一個(gè) QList,用于存儲(chǔ) QSharedPointer< GraphicObject >。這確保了在文檔對(duì)象析構(gòu)時(shí),與其關(guān)聯(lián)的所有圖形對(duì)象也會(huì)被正確釋放。同時(shí),QScopedPointer 確保了 Document 對(duì)象本身在不再需要時(shí)能夠被正確釋放。

智能指針管理內(nèi)存的一個(gè)關(guān)鍵特性:對(duì)象的生命周期與智能指針的生命周期綁定在一起

以上就是C++ QT智能指針的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C++ QT智能指針的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中頭文件的概念與基本編寫方法

    C++中頭文件的概念與基本編寫方法

    這篇文章主要介紹了C++中頭文件的概念與基本編寫方法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-12
  • C語言完美實(shí)現(xiàn)動(dòng)態(tài)數(shù)組代碼分享

    C語言完美實(shí)現(xiàn)動(dòng)態(tài)數(shù)組代碼分享

    本文給大家分享的是一則使用C語言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的代碼,完美解決內(nèi)存溢出以及內(nèi)存回收問題,有需要的小伙伴可以參考下。
    2016-02-02
  • C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拓?fù)渑判?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 淺談?lì)^文件algorithm中的常用函數(shù)

    淺談?lì)^文件algorithm中的常用函數(shù)

    下面小編就為大家?guī)硪黄獪\談?lì)^文件algorithm中的常用函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • C/C++ Qt QThread線程組件的具體使用

    C/C++ Qt QThread線程組件的具體使用

    QThread庫(kù)是QT中提供的跨平臺(tái)多線程實(shí)現(xiàn)方案,本文詳細(xì)的介紹了Qt QThread線程組件的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    這篇文章主要為大家詳細(xì)介紹了C++圖解單向鏈表類模板和iterator迭代器類模版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言實(shí)現(xiàn)文本文件/二進(jìn)制文件格式互換

    C語言實(shí)現(xiàn)文本文件/二進(jìn)制文件格式互換

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)文本文件和二進(jìn)制文件格式互換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • OpenCV 顏色追蹤的示例代碼

    OpenCV 顏色追蹤的示例代碼

    這篇文章主要介紹了OpenCV 顏色追蹤的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)

    Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)

    這篇文章主要介紹了Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)方法,本文通過實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • C++數(shù)據(jù)結(jié)構(gòu)鏈表基本操作示例過程

    C++數(shù)據(jù)結(jié)構(gòu)鏈表基本操作示例過程

    這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)鏈表基本操作的示例過程有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11

最新評(píng)論

响水县| 万载县| 肥乡县| 阜城县| 平昌县| 乌鲁木齐县| 张家川| 望城县| 蒙山县| 九龙坡区| 安龙县| 济南市| 肇东市| 明光市| 广饶县| 天津市| 来凤县| 松潘县| 玉田县| 贵州省| 古田县| 嵊泗县| 从江县| 杭锦旗| 雷州市| 吉安县| 洱源县| 绍兴市| 剑川县| 邢台市| 济宁市| 梧州市| 长阳| 和平县| 金山区| 珠海市| 宜良县| 博野县| 长寿区| 眉山市| 礼泉县|