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

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

Patricia Arquette
Patricia Arquette原創
2024-12-06 07:00:11936瀏覽

How to Use Custom Deleters with `std::unique_ptr` Class Members?

將自訂刪除器與std::unique_ptr 成員一起使用

在程式設計中,使用帶有std::unique_ptr 成員的自訂刪除器可以提供更好的效果控制物體的破壞。本文旨在解決如何在類別結構中合併自訂刪除器的問題。

考慮一個場景,其中類別 Foo 包含 std::unique_ptr 類型的成員。 Bar 是一個第三方類,提供 create() 和 destroy() 函數。在獨立函數中使用 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中文網其他相關文章!

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