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