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
Freigeben: 2024-12-06 07:00:11
Original
964 Leute haben es durchsucht

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); });
}
Nach dem Login kopieren

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) { /* ... */ }

    // ...
};
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage