2009-08-13 3 views

답변

11

표준이 법적 말한다 때문에 위험하지만 : 5.3.5

삭제되는 객체가 삭제의 시점에서 불완전한 클래스 형을 가지고 있으며, 전체 클래스가 아닌 사소한 소멸자가있는 경우 또는 할당 해제 함수의 경우 동작은 입니다.

+0

... 이것은 유형의 소멸자가 사소한 경우 합법적이라는 것을 의미합니다. 컴파일러는 형식을 모르기 때문에 소멸자가 사소한 것인지 여부를 알지 못하며 동작이 정의되지 않았는지 여부를 결정할 수 없습니다. – Suma

5

전달 경고의 결과로 경고가 표시됩니다. 그래서 컴파일러는 그것이 구조체/클래스이지만 소멸자의 호출에 대해서는 확신하지 못했습니다.

msvc에서 분석 할 수있는 코드의 두 번째 패스와 관련하여 가장 가능한 경고의 의미입니다. 후자의 클래스가 해결되면 컴파일러는 소멸자가 존재하면 결정을 내릴 수 있습니다.

2

종종 C++에서는 합법적 인 개념입니다.

대략적으로 경고 수준 1은 "놀랍지 만 그 곳에서 말한 내용을 무시했습니다."라는 형식과 생성 된 코드가 잘못되어 충돌 가능성이있는 몇 가지 선택 진술입니다.

그래서 WL2가 적합합니다. 불완전한 유형을 삭제하는 것이 합법적이며 여러 시나리오에서 완전히 가능하기 때문입니다.

물론이 추론은 교육받은 추측 일뿐입니다. Microsoft는이 경고 수준을 지정하기 위해 주사위를 굴렸을 수도 있습니다.

+0

'아마도 마이크로 소프트가이 경고 수준을 지정하기 위해 주사위를 굴렸을 것입니다. ': D –