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