对于delete
应用于指向不完整类型的指针的情况,Visual C ++有C4150 warning。
根据标准,此类案件会产生不确定的行为。在Visual C ++中的AFAIK,它们会导致默认的operator delete()
函数,并且不会调用析构函数,这会导致许多错误。
现在我可以在Visual C ++中使用#prarma warning( error : 4150 )
将该警告视为错误。我想在Visual C ++中默认它是一个警告而不是错误的原因。
我希望在现实生活中使用哪些代码?为什么我不将该警告转换为编译器错误?
答案 0 :(得分:5)
它并不总是一个UB。
如果被删除的对象在删除时具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,则行为未定义。
答案 1 :(得分:2)
如果指针是0
(或C ++ 11中的nullptr
)怎么样?根据定义,delete 0;
是无操作。