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 Idiom 中的'std::unique_ptr”因类型不完整而失败?的详细内容。更多信息请关注PHP中文网其他相关文章!