Heim >Backend-Entwicklung >C++ >Wie kann ich einen benutzerdefinierten Löscher mit einer „std::unique_ptr'-Mitgliedsvariablen verwenden?

Wie kann ich einen benutzerdefinierten Löscher mit einer „std::unique_ptr'-Mitgliedsvariablen verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-18 12:22:10593Durchsuche

How Can I Use a Custom Deleter with a `std::unique_ptr` Member Variable?

Verwenden eines benutzerdefinierten Löschers mit einem std::unique_ptr-Mitglied

Bei der Arbeit mit einem std::unique_ptr-Mitglied in einer Klasse gibt es Fälle, in denen ein benutzerdefinierter Löscher möglicherweise verwendet wird erforderlich sein. Dies ist besonders relevant, wenn das Mitgliedsobjekt bestimmte Bereinigungs- oder Zerstörungsverfahren erfordert.

Stellen Sie sich ein Szenario vor, in dem Ihre Klasse ein Mitglied std::unique_ptr hat und Bar eine Klasse eines Drittanbieters mit eigener Erstellung ist () und destroy() Funktionen. Um den eindeutigen Besitz dieses Mitglieds zu verwalten, kann ein benutzerdefinierter Löscher implementiert werden.

In einer eigenständigen Funktion könnten Sie einen std::unique_ptr mit einem benutzerdefinierten Löscher wie folgt verwenden:

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

Jetzt passen wir diesen Ansatz an eine Situation an, in der std::unique_ptr als Mitglied in einer Klasse namens verwendet wird Foo:

class Foo {
private:
    std::unique_ptr<Bar, void(*)(Bar*)> bar_;
    ...
public:
    Foo() : bar_(create(), destroy) { /* ... */ }
    // ...
};

Beachten Sie, dass in dieser Implementierung kein Lambda oder benutzerdefinierter Löscher erforderlich ist, da destroy selbst als Löscher dient. Dies ermöglicht eine saubere und übersichtliche Möglichkeit, den eindeutigen Besitz des Anwaltsmitglieds zu verwalten und gleichzeitig sein individuelles Vernichtungsverfahren zu nutzen.

Das obige ist der detaillierte Inhalt vonWie kann ich einen benutzerdefinierten Löscher mit einer „std::unique_ptr'-Mitgliedsvariablen 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