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