C++中shared_ptr是一個智能指針類,用于管理動態(tài)分配的內(nèi)存資源。它具有以下特點:
1. 引用計數(shù):shared_ptr使用引用計數(shù)來跟蹤有多少個shared_ptr指向同一個對象。每次創(chuàng)建或復(fù)制shared_ptr,計數(shù)器會增加。每次shared_ptr被銷毀或重置,計數(shù)器會減少。當(dāng)計數(shù)器為零時,shared_ptr自動銷毀對象并釋放內(nèi)存。
2. 自動資源釋放:shared_ptr采用了RAII(Resource Acquisition Is Initialization)技術(shù),它在對象生命周期結(jié)束時自動釋放相關(guān)資源,無需手動調(diào)用delete。
3. 共享所有權(quán):shared_ptr支持多個shared_ptr對象共享同一塊內(nèi)存資源。當(dāng)所有的shared_ptr對象都被銷毀或重置時,內(nèi)存才會被釋放。
4. 可定制刪除器:shared_ptr允許指定一個刪除器(deleter)函數(shù)來代替默認(rèn)的delete操作。這樣可以實現(xiàn)自定義的資源釋放。
5. 可空:shared_ptr可以為空指針(nullptr),并支持與nullptr的比較。
6. 可拷貝:shared_ptr可以被拷貝,每次拷貝會增加引用計數(shù)。當(dāng)最后一個shared_ptr被銷毀時,內(nèi)存會被釋放。
7. 異常安全:shared_ptr的析構(gòu)函數(shù)和刪除器會在異常拋出時正常工作,避免資源泄露。
8. 支持自定義刪除器:shared_ptr可以使用自定義的刪除器來釋放內(nèi)存,例如自定義的函數(shù)、函數(shù)對象或lambda表達(dá)式。
總的來說,shared_ptr提供了一種安全、方便的方式來管理動態(tài)分配的內(nèi)存,并且可以多個shared_ptr共享同一塊內(nèi)存資源。它是C++中重要的內(nèi)存管理工具之一。