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
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!