std::unique_ptr 및 Incomplete Types: A Deeper Look
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!