首頁 >後端開發 >C++ >如何在 C 類別中將自訂刪除器與 std::unique_ptr 成員一起使用?

如何在 C 類別中將自訂刪除器與 std::unique_ptr 成員一起使用?

Susan Sarandon
Susan Sarandon原創
2024-12-08 12:16:11724瀏覽

How Can I Use Custom Deleters with std::unique_ptr Members in a C   Class?

帶有std::unique_ptr 成員的自訂刪除器

在C 中, std::unique_ptr 類別提供了一種管理指針所有權的便捷方法是基於物件。但是,如果您正在使用需要自訂刪除程序的第三方對象,則在使用 std::unique_ptr 作為類別的成員時可能會遇到挑戰。

考慮以下場景:您有一個帶有 std::unique_ptr 的類別成員。 Bar 類別來自第三方函式庫,並定義了自己的 create() 和 destroy() 函數,用於物件實例化和銷毀。

要在獨立函數中使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn