帶有std::unique_ptr 成員的自訂刪除器
在C 中, std::unique_ptr 類別提供了一種管理指針所有權的便捷方法是基於物件。但是,如果您正在使用需要自訂刪除程序的第三方對象,則在使用 std::unique_ptr 作為類別的成員時可能會遇到挑戰。
考慮以下場景:您有一個帶有 std::unique_ptr
要在獨立函數中使用 std::unique_ptr 與此類場景,您需要可以使用自訂刪除器:
void foo() { std::unique_ptr<Bar, void (*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); }); ... }
但是當 std::unique_ptr 是 a的成員時,如何實現這一點class?
類別成員中的自訂刪除器
假設create 和destroy 是具有以下簽名的自由函數:
Bar* create(); void destroy(Bar*);
您可以定義您的Foo類別如下:
class Foo { std::unique_ptr<Bar, void (*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
在此實作中,您直接提供 destroy 函數作為 std::unique_ptr 的刪除器。透過使用自由函數作為刪除器,您可以避免使用 lambda 或自訂刪除器類別。
以上是如何在 C 類別中將自訂刪除器與 std::unique_ptr 成員一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!