在C ++中删除不完整类型不是错误时是否存在实际情况?

时间:2011-10-27 15:03:43

标签: c++ visual-c++ compiler-construction compiler-warnings delete-operator

对于delete应用于指向不完整类型的指针的情况,Visual C ++有C4150 warning

根据标准,此类案件会产生不确定的行为。在Visual C ++中的AFAIK,它们会导致默认的operator delete()函数,并且不会调用析构函数,这会导致许多错误。

现在我可以在Visual C ++中使用#prarma warning( error : 4150 )将该警告视为错误。我想在Visual C ++中默认它是一个警告而不是错误的原因。

我希望在现实生活中使用哪些代码?为什么我不将该警告转换为编译器错误?

2 个答案:

答案 0 :(得分:5)

它并不总是一个UB。

  

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

答案 1 :(得分:2)

如果指针是0(或C ++ 11中的nullptr)怎么样?根据定义,delete 0;是无操作。