是否有一個標準指針類(或Boost),它是一個非共享指針,用於處理不完整類型?我已經瀏覽了C++ 11標準和boost庫,但找不到一個,儘管它看起來非常有用。一個不完整類型的非共享智能指針
例如,我希望能夠使用智能指針製作不透明類型。
class A;
wrap_ptr<A> some_func();
void other_func(A const &);
A
是一種不透明的類型,可用於各種功能。上述接口的用戶只有A的不完整定義,但應該能夠刪除/重置指針。我知道上述可以用shared_ptr
來完成,但是在這個特定的代碼中有一個我不想要的開銷。 unique_ptr
擁有正確的所有權語義,但無法使用不完整的類型。理論上,一個包裝只需要一個指向刪除器的開銷。
在C++ 11或boost庫中是否存在這樣的類型?
注:我明白我可以輕鬆地構建這種類型,但如果可能的話我更喜歡標準類型。它似乎應該是一個基本的智能指針類型。
UPDATE:unique_ptr
並不似乎是一個不錯的選擇。首先,語法開銷將被抵消。其次,我不相信它可以安全地與自定義刪除器一起使用。我會檢查它是如何工作的。
儘管技術上屬實,但直接使用它在語法上不友好。你不能簡單地做'ptr_type(new T)',但是,假設你得到的模板typedef正確,你必須執行'ptr_type(new T,T ::〜T)'。 – 2012-01-30 09:46:44
實際上,仔細查看'unique_ptr'不能使用具有狀態的定製刪除程序。 'reset'函數不允許指定刪除器,只有構造函數會這樣做,因此'unique_ptr'的自定義刪除方面部分被破壞。 – 2012-01-30 09:47:40
不需要自定義刪除器,只有在調用'unique_ptr'的析構函數時才需要完成類型,這意味着您可以在持有的類完成後定義析構函數。 – Xeo 2012-01-30 13:20:34