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

sha*_*oth 3 c++ compiler-construction compiler-warnings visual-c++ delete-operator

当应用于指向不完整类型的指针时,Visual C++会出现C4150警告delete.

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

现在我可以用#prarma warning( error : 4150 )Visual C++将该警告视为错误.我想有一些原因是为什么它是一个警告而不是默认情况下在Visual C++中的错误.

我想在哪些现实代码中允许这样的情况?为什么我不将该警告切换为编译器错误?

Cat*_*lus 5

它并不总是一个UB.

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