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