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