现实生活中是否存在删除不完整类型在 C++ 中不是错误的情况?

问题描述 投票:0回答:2
对于将

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

C4150 警告

根据标准,这种情况会产生未定义的行为。据我所知,在 Visual C++ 中,它们会导致默认的

operator delete()
函数,并且不会调用析构函数,这会导致大量错误。

现在我可以在 Visual C++ 中使用

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

在现实生活中的哪些代码中我希望允许这种情况?为什么我不将该警告转换为编译器错误?

c++ visual-c++ compiler-warnings delete-operator
2个回答
5
投票

并不总是 UB。

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


2
投票

如果指针是

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

© www.soinside.com 2019 - 2024. All rights reserved.