std::unique_ptr と不完全型: より深く見てみる
std::unique_ptr:
class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile };
問題の核心: 破壊
鍵は破壊にあります。 pimpl を unique_ptr とともに使用する場合、デストラクターを明示的に宣言する必要があります:class foo { class impl; std::unique_ptr<impl> impl_; public: foo(); // Constructor may need external definition ~foo(); // Implement (braceless or with = default;) once impl is complete };
テンプレートの問題と静的期間インスタンス
テンプレートありコンストラクターでは、impl_ メンバーが構築されていない場合でも複雑な問題が発生します:template <typename T> foo::foo(T bar) { // Compiler requires knowledge of impl_ destruction at compile time! }
class impl; std::unique_ptr<impl> impl_;
以上がPimpl イディオムで不完全な型があると `std::unique_ptr` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。