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

moa*_*ala 11 c++ compiler-construction compiler-warnings visual-c++

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

Tad*_*pec 12

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

如果被删除的对象在删除时具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,则行为是未定义的.


Dew*_*wfy 5

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

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