Heim >Backend-Entwicklung >C++ >Wie verwende ich benutzerdefinierte Löschprogramme mit Klassenmitgliedern „std::unique_ptr'?

Wie verwende ich benutzerdefinierte Löschprogramme mit Klassenmitgliedern „std::unique_ptr'?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-06 07:00:11960Durchsuche

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

Verwendung benutzerdefinierter Löscher mit std::unique_ptr-Mitgliedern

Beim Programmieren kann die Verwendung eines benutzerdefinierten Löschers mit einem std::unique_ptr-Mitglied mehr bringen Kontrolle über die Zerstörung von Objekten. In diesem Artikel geht es um die Frage, wie ein benutzerdefinierter Löscher in eine Klassenstruktur integriert werden kann.

Stellen Sie sich ein Szenario vor, in dem eine Klasse, Foo, ein Mitglied vom Typ std::unique_ptr enthält. Bar ist eine Drittanbieterklasse, die sowohl eine create()- als auch eine destroy()-Funktion bietet. Beim Arbeiten mit std::unique_ptr in einer eigenständigen Funktion kann die folgende Syntax verwendet werden:

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
}

Dieser Ansatz ermöglicht die Angabe eines benutzerdefinierten Löschers mithilfe eines Lambda-Ausdrucks. Es stellt sich die Frage: Gibt es eine Möglichkeit, dieses Verhalten zu reproduzieren, wenn std::unique_ptr als Mitglied einer Klasse verwendet wird?

Lösung: Benutzerdefinierter Löscher für Klassenmitglied

Angenommen, dass Erstellen und Zerstören kostenlose Funktionen sind, kann die folgende Lösung implementiert werden:

class Foo {

    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

public:

    Foo() : ptr_(create(), destroy) { /* ... */ }

    // ...
};

In diesem Szenario der benutzerdefinierte Löscher wird direkt in der Klassendefinition bereitgestellt. Die Destroy-Funktion wird als Löschfunktion verwendet, sodass kein Lambda-Ausdruck erforderlich ist. Dieser Ansatz stellt sicher, dass das Bar-Objekt ordnungsgemäß zerstört wird, wenn das Foo-Objekt den Gültigkeitsbereich verlässt.

Das obige ist der detaillierte Inhalt vonWie verwende ich benutzerdefinierte Löschprogramme mit Klassenmitgliedern „std::unique_ptr'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn