Verwendung von std::unique_ptr mit unvollständigen Typen
In der Pimpl-Sprache kann die Verwendung von std::unique_ptr mit einem unvollständigen Typ zur Kompilierung führen Fehler. Betrachten Sie den folgenden Code:
class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile };
Der Fehler entsteht typischerweise durch den Versuch, sizeof für einen unvollständigen Typ zu verwenden, wie in
Das Problem
Das Problem ergibt sich aus der Tatsache, dass der Compiler die Größe des unvollständigen Typs kennen muss, um die Zuweisung für std: zu bestimmen: unique_ptr. Diese Informationen sind nicht verfügbar, was zu einem Kompilierungsfehler führt.
Die Lösung
Um dieses Problem zu beheben, ist es wichtig, einen Destruktor für die Klasse zu implementieren, die den unique_ptr enthält. Dies liegt daran, dass der vom Compiler generierte Standarddestruktor eine vollständige Deklaration des Typs erfordert. Hier ist ein Beispiel:
class foo { class impl; std::unique_ptr<impl> impl_; public: foo(); // You may need a def. constructor to be defined elsewhere ~foo(); // Implement (with {}, or with = default;) where impl is complete };
Durch die Implementierung des Destruktors erhält der Compiler das nötige Wissen, um die Zerstörung des unique_ptr zu bewältigen.
Sonderfälle
In bestimmten Szenarien ist die Verwendung von unique_ptr mit unvollständigen Typen möglicherweise nicht möglich möglich:
class impl; struct ptr_impl : std::unique_ptr<impl> { ~ptr_impl(); // Implement (empty body) elsewhere } impl_;
Durch Befolgen dieser Richtlinien können Sie unique_ptr effektiv mit unvollständigen Typen verwenden und so einen reibungslosen Kompilierungsprozess gewährleisten.
Das obige ist der detaillierte Inhalt vonWie kann ich „std::unique_ptr' mit unvollständigen Typen in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!