불완전한 유형 컴파일 오류가 있는 std::unique_ptr
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 };
불완전한 유형의 사용과 관련된 컴파일 오류가 발생할 수 있습니다. 이 오류는 std::unique_ptr과 함께 pimpl을 사용할 때 소멸자를 선언해야 한다는 사실에서 비롯됩니다.
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 };
소멸자가 명시적으로 선언되지 않은 경우 컴파일러는 완전한 소멸자가 필요한 기본 소멸자를 생성합니다. foo::impl 클래스 선언. 이로 인해 불완전한 유형으로 작업할 때 컴파일 오류가 발생할 수 있습니다.
이 문제를 해결하려면 위의 코드 조각에서 볼 수 있듯이 본문이 비어 있거나 기본값으로 설정하여 클래스에 대한 소멸자를 구현하세요. 이렇게 하면 컴파일러가 std::unique_ptr에 의해 관리되는 객체의 소멸을 적절하게 처리할 수 있습니다.
또한, 불완전한 유형의 std::unique_ptr을 사용하는 것은 네임스페이스 범위에서 지원되지 않습니다. 대신 아래 코드 조각에 설명된 대로 소멸자를 제공하는 사용자 정의 구조체 내에 std::unique_ptr을 래핑하여 해결 방법을 사용할 수 있습니다.
class impl; struct ptr_impl : std::unique_ptr<impl> { ~ptr_impl(); // Implement (empty body) elsewhere } impl_;
위 내용은 불완전한 유형과 함께 `std::unique_ptr`을 사용하면 컴파일 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!