將自訂刪除器與std::unique_ptr 成員一起使用
在程式設計中,使用帶有std::unique_ptr 成員的自訂刪除器可以提供更好的效果控制物體的破壞。本文旨在解決如何在類別結構中合併自訂刪除器的問題。
考慮一個場景,其中類別 Foo 包含 std::unique_ptr
void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); }
此方法允許使用 lambda 表達式指定自訂刪除器。問題出現了:當 std::unique_ptr 用作類別的成員時,是否有辦法複製此行為?
解決方案:類別成員的自訂刪除器
假設create和destroy是自由函數,可以實現以下解決方案:
class Foo { std::unique_ptr<Bar, void(*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
在這種情況下,自訂刪除器直接在類別定義中提供。 destroy 函數用作刪除器,無需 lambda 表達式。這種方法確保當 Foo 物件超出範圍時 Bar 物件被正確銷毀。
以上是如何將自訂刪除器與 `std::unique_ptr` 類別成員一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!