当然警告必须处理,但是为什么VC++C4150(删除不完整类型的指针)只是警告?
因为标准说它是合法的,尽管很危险:5.3.5
如果被删除的对象有 此时的类类型不完整 删除并且完整的类有一个 非平凡的析构函数或 解除分配函数,其行为是 未定义。
由于前向声明,您会收到此警告。所以编译器已经识别出它是结构/类,但不确定析构函数的调用。
最有可能的警告感与 msvc 的第二遍代码分析有关。当后一个类被解析时,编译器可以决定析构函数是否存在。
它在 C++ 中是合法的,尽管通常是一个坏主意。
粗略地说,1 级警告属于“您可能会感到惊讶,但我忽略了您在那里所说的内容”类型,以及一些选定的语句,其中生成的代码很可能不正确且容易崩溃。
所以 WL 2 是合适的,因为它是合法的,并且在许多情况下完全可以删除不完整的类型。
当然,这种推理只是有根据的猜测。也许微软掷骰子来指定这个警告级别。