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

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

 更新時(shí)間:2023年12月30日 10:36:55   作者:我不是程序猿兒  
這篇文章主要介紹了C++ QT智能指針的使用,Qt是一個(gè)跨平臺(tái)的C++框架,主要用來(lái)開(kāi)發(fā)圖形用戶(hù)界面程序,也可以開(kāi)發(fā)不帶界面的命令行程序,下面我們來(lái)了解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:用來(lái)監(jiān)視shared_ptr的生命周期,它不管理shared_ptr內(nèi)部的指針,它的拷貝析構(gòu)都不會(huì)影響引用計(jì)數(shù),純粹是作為一個(gè)旁觀者監(jiān)視shared_ptr中管理的資源是否存在,可以用來(lái)返回this指針和解決循環(huán)引用問(wèn)題。

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

Qt中的智能指針

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

QPointer只能用于指向QObject及派生類(lèi)的對(duì)象。當(dāng)一個(gè)QObject或派生類(lèi)對(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功能是一樣的

一些名詞:空指針,野指針,垂懸指針,無(wú)效指針

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

使用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ì)象類(lèi)
class GraphicObject {
public:
    GraphicObject() { qDebug() << "GraphicObject created"; }
    ~GraphicObject() { qDebug() << "GraphicObject destroyed"; }
    // 具體的圖形對(duì)象操作
};
// 文檔對(duì)象類(lèi)
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 類(lèi)包含一個(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++中頭文件的概念與基本編寫(xiě)方法

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

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

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

    本文給大家分享的是一則使用C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的代碼,完美解決內(nèi)存溢出以及內(nèi)存回收問(wèn)題,有需要的小伙伴可以參考下。
    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ái)一篇淺談?lì)^文件algorithm中的常用函數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • C/C++ Qt QThread線(xiàn)程組件的具體使用

    C/C++ Qt QThread線(xiàn)程組件的具體使用

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

    C++圖解單向鏈表類(lèi)模板和iterator迭代器類(lèi)模版詳解

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

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

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

    OpenCV 顏色追蹤的示例代碼

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

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

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

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

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

最新評(píng)論

车险| 清丰县| 乌拉特后旗| 资中县| 博白县| 宝应县| 二连浩特市| 伊宁县| 罗平县| 乐昌市| 灌云县| 镇江市| 历史| 古浪县| 广南县| 浦北县| 建阳市| 周宁县| 凉山| 彭州市| 武宁县| 沈阳市| 昂仁县| 厦门市| 保德县| 宝兴县| 林甸县| 石屏县| 郧西县| 大埔区| 桦南县| 钦州市| 台东县| 邛崃市| 凤山市| 穆棱市| 连平县| 潼关县| 扎兰屯市| 武宣县| 加查县|