簡體   English   中英

C ++ / Boost用於管理資源生命周期的共享資源類,如shared_ptr

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM