为什么VC ++ C4150(删除不完整类型的指针)只是一个警告?

时间:2009-08-13 11:06:53

标签: c++ compiler-construction visual-c++ compiler-warnings

当然,必须处理警告,但为什么VC ++ C4150 (删除指向不完整类型的指针)只是警告?

3 个答案:

答案 0 :(得分:12)

因为标准认为它是合法的,虽然危险:5.3.5

  

如果要删除的对象有   不完整的类型   删除和完整的类有一个   非平凡的析构函数或者   解除分配函数,行为是   未定义。

答案 1 :(得分:5)

作为前瞻性声明的结果,您收到此警告。所以编译器已经认识到它是结构/类,但不确定析构函数的调用。

警告感最有可能与msvc的第二次代码分析有关。当后一个类被解析时,编译器可以在析构函数存在时做出决定。

答案 2 :(得分:2)

它在C ++中是合法的,尽管通常是一个坏主意。

粗略地说,警告级别1是“您可能会感到惊讶,但我忽略了您在那里所说的”类型,以及一些选定的语句,其中生成的代码很可能不正确并且容易崩溃。

因此,WL 2是合适的,因为它是合法的,并且在许多情况下完全可以删除不完整的类型。

当然,这种推理只是一种有根据的猜测。也许微软将骰子推到了这个警告级别。