Heim > Backend-Entwicklung > C++ > Wie kann ich benutzerdefinierte Löscher mit std::unique_ptr-Mitgliedern in einer C-Klasse verwenden?

Wie kann ich benutzerdefinierte Löscher mit std::unique_ptr-Mitgliedern in einer C-Klasse verwenden?

Susan Sarandon
Freigeben: 2024-12-08 12:16:11
Original
724 Leute haben es durchsucht

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

Benutzerdefinierte Löscher mit std::unique_ptr-Mitgliedern

In C bietet die Klasse std::unique_ptr eine praktische Möglichkeit, den Besitz des Zeigers zu verwalten -basierte Objekte. Wenn Sie jedoch mit Objekten von Drittanbietern arbeiten, die einen benutzerdefinierten Löschvorgang erfordern, kann es bei der Verwendung von std::unique_ptr als Mitglied einer Klasse zu Herausforderungen kommen.

Stellen Sie sich das folgende Szenario vor: Sie haben ein Klasse mit einem std::unique_ptr Mitglied. Die Bar-Klasse stammt aus einer Bibliothek eines Drittanbieters und definiert ihre eigenen Funktionen create() und destroy() für die Instanziierung und Zerstörung von Objekten.

Um std::unique_ptr mit einem solchen Szenario in einer eigenständigen Funktion zu verwenden, müssen Sie kann einen benutzerdefinierten Löscher verwenden:

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

Aber wie können Sie dies erreichen, wenn std::unique_ptr Mitglied von a ist Klasse?

Benutzerdefinierte Löscher in Klassenmitgliedern

Angenommen, dass Erstellen und Zerstören kostenlose Funktionen mit den folgenden Signaturen sind:

Bar* create();
void destroy(Bar*);
Nach dem Login kopieren

Sie können definieren Ihre Foo-Klasse wie folgt:

class Foo {

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

    // ...

public:

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

    // ...
};
Nach dem Login kopieren

In dieser Implementierung stellen Sie die Destroy-Funktion direkt als Löschfunktion für die bereit std::unique_ptr. Durch die Verwendung einer kostenlosen Funktion als Löscher vermeiden Sie die Notwendigkeit von Lambdas oder benutzerdefinierten Löscherklassen.

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Löscher mit std::unique_ptr-Mitgliedern in einer C-Klasse verwenden?. 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