경고 컴파일이 유사 코드의 조각을 벗었 :C++ 인플레 이스 소멸자 내 코드에서 인플레 이스 소멸자를 사용하고
warning C4189: 'b': local variable is initialized but not referenced
심지어 -Wall로, ++하지만 g에서 잘 컴파일합니다. 왜 내가 경고를 받는지 아는가? 이것은 컴파일러의 버그일까요? b는 b->~Node()
호출에서 명확하게 사용됩니다.
struct Node {
~Node() {
}
};
그러나 지금까지의 내가 이런 말을 수 차이를 수행하지 않아야합니다
또한 내가이에 노드 구현을 변경할 때 잘 컴파일 것으로 보인다.
흠, 내 생각 엔 옵티마이 저는 기본 소멸자에 대한 호출을 완전히 제거하고 'b'가 사용되지 않는다고 추측합니다. 최적화 된 빌드를 컴파일 할 때만 또는 최적화되지 않은/디버깅 빌드에서도이 경고가 표시됩니까? –
또한 디버그 빌드에 있습니다. – martinus
흥미 롭습니다. 32 비트 및 64 비트 빌드와 VS 2010, 2012 및 2015에서 옵티 마이저를 활성화하고 비활성화 한 상태에서 재 작성합니다. 버그가있는 것처럼 보입니다. (그것은 * 물론 * 최적화 된 빌드에서 소멸자에 대한 호출을 제거하고 실제로 생성자에 대한 호출을 생략합니다. 오브젝트 코드는'malloc'과'free'만을 호출합니다.) –