欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:開發(fā)語言 QT智能指針詳解

柚子快報激活碼778899分享:開發(fā)語言 QT智能指針詳解

http://yzkb.51969.com/

目錄

QScopedPointerQSharedPointerQWeakPointer

QScopedPointer

QScopedPointer 是 Qt 框架中提供的一個智能指針類,其核心目的是為了管理動態(tài)分配的對象的生命周期。它保證在 QScopedPointer 所在的作用域結(jié)束時自動刪除其管理的對象,從而幫助防止內(nèi)存泄漏。它類似于 C++11 的 std::unique_ptr,但不支持 C++11 的移動語義

1.特點:

自動資源管理:QScopedPointer 自動釋放它所持有的對象,確保資源得到合理的管理。所有權(quán):QScopedPointer 對象擁有嚴(yán)格的所有權(quán)管理,即它不允許復(fù)制或賦值,確保一個對象只有一個擁有者。作用域限定:QScopedPointer 確保只在定義它的局部作用域內(nèi)有效,出了作用域就會自動釋放所管理的資源。

2.常用方法:

reset():刪除當(dāng)前對象,接受一個新的對象指針以管理。如果不傳遞參數(shù),則簡單地刪除當(dāng)前對象并將指針置為 nullptrdata():返回一個指向所管理對象的裸指針,不改變所有權(quán)take():釋放對對象的所有權(quán)并返回對象的裸指針,QScopedPointer 隨后不再管理任何對象isNull():檢查 QScopedPointer 是否為空(即是否指向 nullptr)操作符重載:允許使用->訪問所持有的對象,就像普通指針一樣

使用示例

class MyClass {

public:

void display() { qDebug() << "Displaying MyClass"; }

};

void scopedPointerExample() {

QScopedPointer ptr(new MyClass);

ptr->display(); // 訪問通過 operator->()

ptr.reset(new MyClass()); // 重置指針,自動刪除舊對象

if (!ptr.isNull()) {

ptr->display();

}

MyClass* raw = ptr.take(); // 取出裸指針,ptr 現(xiàn)在為空

if (ptr.isNull()) {

qDebug() << "Pointer is now null.";

}

delete raw; // 手動刪除對象

}

QSharedPointer

QSharedPointer 是 Qt 庫中提供的一個引用計數(shù)型智能指針。它用于管理動態(tài)分配的對象的生命周期,通過跟蹤指向同一個對象的所有 QSharedPointer 實例的數(shù)量來實現(xiàn)。當(dāng)最后一個這樣的智能指針被銷毀或重置時,所管理的對象也會被自動刪除

1.特點

引用計數(shù):內(nèi)部通過引用計數(shù)來確保只有最后一個指針被銷毀時,對象才會被刪除線程安全:QSharedPointer 的引用計數(shù)機(jī)制是線程安全的,適用于多線程環(huán)境自動資源管理:自動管理所指向的對象,防止內(nèi)存泄漏復(fù)制和賦值:允許復(fù)制和賦值操作,復(fù)制時引用計數(shù)會增加,賦值時先減少原有對象的引用計數(shù),可能導(dǎo)致原有對象的刪除

這里特別說明一下線程安全這個問題,在官方文檔中翻了一下大概意思是這樣的: QSharedPointer 的線程安全性體現(xiàn)在其引用計數(shù)的增加和減少操作上。在多線程環(huán)境中,如果多個線程同時對同一個 QSharedPointer 對象執(zhí)行引用計數(shù)的增加和減少操作,Qt 會確保這些操作的原子性,避免了競態(tài)條件和數(shù)據(jù)競爭。官方文檔地址

2.常用方法

reset():重置智能指針,可以指定新的對象或者重置為 nullptrdata():返回管理的對象的裸指針,但不改變所有權(quán)isNull():檢查智能指針是否為空clear():等同于 reset(),將內(nèi)部指針置為 nullptr操作符重載:允許使用->訪問所持有的對象,就像普通指針一樣toStrongRef(): 返回一個新的 QSharedPointertoWeakRef() :返回一個 QWeakPointer,后者可以用來避免循環(huán)引用問題。

使用示例:

class MyClass {

public:

MyClass() { qDebug() << "MyClass created"; }

~MyClass() { qDebug() << "MyClass destroyed"; }

void display() const { qDebug() << "Displaying MyClass"; }

};

void sharedPointerExample() {

QSharedPointer ptr1(new MyClass()); // 對象創(chuàng)建

{

QSharedPointer ptr2 = ptr1; // 引用計數(shù)增加

ptr2->display(); // 通過 ptr2 訪問對象

} // ptr2 出作用域,引用計數(shù)減少

ptr1->display(); // 對象仍然存在,可以通過 ptr1 訪問

} // ptr1 出作用域,引用計數(shù)為 0,對象被銷毀

QWeakPointer

QWeakPointer 是 Qt 庫中的一種智能指針,用于在不增加對象引用計數(shù)的情況下,持有對由 QSharedPointer 管理的對象的非擁有(弱)引用。它可以防止循環(huán)引用問題,并且當(dāng)原始 QSharedPointer 不再存在時,QWeakPointer 不會保持對象存活,而是變得無效

1.使用場景:

防止循環(huán)引用:當(dāng)使用 QSharedPointer 并且對象之間相互引用,可以用QWeakPointer 打破循環(huán)引用,防止內(nèi)存泄漏 -暫時引用:當(dāng)你需要引用一個對象,但不需要該對象因此而保持活躍時,使用 QWeakPointer

使用示例

class MyClass {

public:

MyClass() { qDebug() << "MyClass created"; }

~MyClass() { qDebug() << "MyClass destroyed"; }

};

void testWeakPointer() {

QWeakPointer weak;

{

QSharedPointer strong = QSharedPointer(new MyClass);

weak = strong;

if (weak.toStrongRef()) {

qDebug() << "Object is still alive";

}

}

if (!weak.toStrongRef()) {

qDebug() << "Object has been destroyed";

}

}

柚子快報激活碼778899分享:開發(fā)語言 QT智能指針詳解

http://yzkb.51969.com/

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19393235.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄