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

问题描述 投票:0回答:3

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

c++ visual-c++ compiler-warnings
3个回答
12
投票

因为标准说它是合法的,尽管很危险:5.3.5

如果被删除的对象有 此时的类类型不完整 删除并且完整的类有一个 非平凡的析构函数或 解除分配函数,其行为是 未定义。


5
投票

由于前向声明,您会收到此警告。所以编译器已经识别出它是结构/类,但不确定析构函数的调用。

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


2
投票

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

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

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

当然,这种推理只是有根据的猜测。也许微软掷骰子来指定这个警告级别。

© www.soinside.com 2019 - 2024. All rights reserved.