반응형
unique_ptr로 전달 선언?
이 질문에 이미 답변이 있습니다.
std::unique_ptr
아래 코드에서 와 같이 클래스의 포워드 선언을 함께 사용하는 것이 유용하다는 것을 알았습니다 . GCC와 함께 컴파일되고 작동하지만 모든 것이 이상하게 보이며 이것이 표준 동작인지 궁금합니다 (즉, 표준에서 요구하는 것입니까)? 내가 선언 할 때 B는 완전한 유형이 아니기 때문에 unique_ptr
.
A.hpp
#include <memory>
class B;
class A {
std::unique_ptr<B> myptr;
// B::~B() can't be seen from here
public:
~A();
};
A.cpp
#include "B.hpp"
//B.hpp has to be included, otherwise it doesn't work.
A::~A() = default; // without this line, it won't compile
// however, any destructor definiton will do.
나는 이것이 소멸자와 관련이 있다고 생각합니다 (따라서 소멸자를 호출해야 할 필요성 unique_ptr<B>
)은 특정 컴파일 단위 (A.cpp)에 정의되어 있습니다.
명시 적으로 합법적입니다. 규칙은 별도로 지정 하지 않는 한 표준 라이브러리에서 템플릿을 인스턴스화하는 데 사용되는 유형이 완전해야한다는 것 입니다. 의 경우 unique_ptr
§20.7.1 / 5에는 "[...] unique_ptr의 템플릿 매개 변수 T가 불완전한 유형일 수 있습니다."라고 말합니다.
완전한 유형을 요구하는 포인터에 대한 특정 작업이 있습니다. 특히, 객체가 실제로 파괴 될 때 (적어도 기본 삭제 자 사용). 예를 들어, A::~A()
인라인 이라면 문제가 발생할 수 있습니다. (소멸자를 직접 선언하지 않으면 인라인 상태가됩니다. 이는 부분적으로 사용 목적에 위배됩니다 std::unique_ptr
.)
참고 URL : https://stackoverflow.com/questions/13414652/forward-declaration-with-unique-ptr
반응형
'Nice programing' 카테고리의 다른 글
"직접"가상 호출과 C #의 인터페이스 호출 성능 (0) | 2020.12.05 |
---|---|
ASP.Net MVC 4 앱을 철저히 단위 테스트 (0) | 2020.12.05 |
Microsoft Excel은 파일을 저장할 때 어떤 문자 집합을 사용합니까? (0) | 2020.12.05 |
2038 년에 대비하려면 어떻게해야합니까? (0) | 2020.12.05 |
http 기본 인증 "로그 아웃" (0) | 2020.12.05 |