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

Wie verwende ich benutzerdefinierte Löscher mit „std::unique_ptr'-Mitgliedsvariablen? „

Barbara Streisand
Freigeben: 2024-12-15 17:07:11
Original
750 Leute haben es durchsucht

How to Use Custom Deleters with `std::unique_ptr` Member Variables?
```

Benutzerdefinierte Löschprogramme mit std::unique_ptr-Mitgliedsvariablen verwenden

Bei der Arbeit mit Klassen von Drittanbietern, die einen bestimmten Löschmechanismus erfordern, kann es zu Situationen kommen, in denen dies erforderlich ist Verwenden Sie einen benutzerdefinierten Löscher mit std::unique_ptr-Mitgliedsvariablen. Dieser Artikel bietet eine Lösung, um dies zu erreichen.

Problem

Stellen Sie sich vor, Sie haben eine Klasse Foo mit einer Mitgliedsvariablen vom Typ std::unique_ptr. In diesem Szenario verfügt die Drittanbieterklasse Bar über eine dedizierte create()- und destroy()-Funktion zum Erstellen und Zerstören von Objekten.

Beispiel für eine eigenständige Funktion

In einer eigenständigen Funktion können Sie verwenden ein benutzerdefinierter Löscher mit std::unique_ptr wie folgt:

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

Verwenden benutzerdefinierter Löscher mit Mitgliedsvariablen

Um das zu erreichen gleiche Funktionalität beim Arbeiten mit Mitgliedsvariablen, hier ist die Lösung:

class Foo {

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

    // ...

public:

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

    // ...
};
Nach dem Login kopieren

In diesem Code:

  • Die ptr_-Mitgliedsvariable wird als unique_ptr vom Typ Bar deklariert.
  • Der benutzerdefinierte Löscher wird als zweiter Vorlagenparameter angegeben, bei dem es sich um einen Funktionszeiger mit der Signatur handelt void(*)(Bar*).
  • Der Klassenkonstruktor initialisiert ptr_ mit den Funktionen create() und destroy() als Löscher.

Mit diesem Ansatz können Sie benutzerdefinierte verwenden Löschfunktionen für std::unique_ptr-Mitgliedsvariablen, um eine ordnungsgemäße Ressourcenverwaltung auch für Klassen von Drittanbietern sicherzustellen.

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

Quelle:php.cn
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