Heim >Backend-Entwicklung >C++ >Wie verwende ich benutzerdefinierte Löschprogramme mit Klassenmitgliedern „std::unique_ptr'?
Verwendung benutzerdefinierter Löscher mit std::unique_ptr-Mitgliedern
Beim Programmieren kann die Verwendung eines benutzerdefinierten Löschers mit einem std::unique_ptr-Mitglied mehr bringen Kontrolle über die Zerstörung von Objekten. In diesem Artikel geht es um die Frage, wie ein benutzerdefinierter Löscher in eine Klassenstruktur integriert werden kann.
Stellen Sie sich ein Szenario vor, in dem eine Klasse, Foo, ein Mitglied vom Typ std::unique_ptr
void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); }
Dieser Ansatz ermöglicht die Angabe eines benutzerdefinierten Löschers mithilfe eines Lambda-Ausdrucks. Es stellt sich die Frage: Gibt es eine Möglichkeit, dieses Verhalten zu reproduzieren, wenn std::unique_ptr als Mitglied einer Klasse verwendet wird?
Lösung: Benutzerdefinierter Löscher für Klassenmitglied
Angenommen, dass Erstellen und Zerstören kostenlose Funktionen sind, kann die folgende Lösung implementiert werden:
class Foo { std::unique_ptr<Bar, void(*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
In diesem Szenario der benutzerdefinierte Löscher wird direkt in der Klassendefinition bereitgestellt. Die Destroy-Funktion wird als Löschfunktion verwendet, sodass kein Lambda-Ausdruck erforderlich ist. Dieser Ansatz stellt sicher, dass das Bar-Objekt ordnungsgemäß zerstört wird, wenn das Foo-Objekt den Gültigkeitsbereich verlässt.
Das obige ist der detaillierte Inhalt vonWie verwende ich benutzerdefinierte Löschprogramme mit Klassenmitgliedern „std::unique_ptr'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!