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
Susan SarandonOriginal
2024-12-08 12:16:11765Durchsuche

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); });
    ...
}

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*);

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

class Foo {

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

    // ...

public:

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

    // ...
};

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!

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