[英]C++ / Boost shared resource class for managing resource lifecycle like shared_ptr
Boost或其他任何包含容器的東西是否會像共享指針一樣,但允許我控制共享“資源”在其生命周期結束時會發生什么? 我想封裝一個可以傳遞的對象,但是當不再需要時可以以上下文定義的方式關閉它。
例如,我可能想要創建並傳遞一個文件句柄,知道當它超出范圍時,文件將自動關閉,但我不想刪除句柄。
我可以自己實現它,但如果框架已經存在,我寧願不進入它 - 有人毫無疑問做得更好。 我不能使用boost::shared_ptr
,至少不能使用它的正常形式,因為不應該在生命結束時刪除資源。
您是否知道std::shared_ptr
可以使用自定義刪除器類? 這實際上不需要使用“刪除”或“免費”,但可以輕松使用其他類型的機制(例如引用計數機制的release
等)。
這是一個簡單的例子:
std::shared_ptr<FILE> foo(fopen("la", "r"), fclose);
刪除器只需要是一個獲取shared_ptr
包裝的指針類型的函數。 在這種情況下,當foo超出范圍時, shared_ptr
將為您關閉該文件。 (注意:這不是一個完全合理的實現,因為沒有檢查錯誤值。這只是一個例子)。
如果您使用的是支持C ++ 11 std::shared_ptr
的編譯器,則其中一個構造函數采用自定義“刪除”功能。 這將允許您編寫自己的“釋放”資源的功能。
編輯 - 我忘了std :: shared_ptr實際上是對C ++的TR1更新,所以如果你的編譯器支持TR1,你應該處於良好的狀態。
由於你不能使用Boost或std :: shared_ptr,你可以寫一個共享的智能指針或具有自定義Deleter的唯一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.