用 delete 释放不完整类型的对象,但在对象完整类型声明中有 non-trivial 析构函数
C++-Undefined-Behavior-41
示例:
struct T;
void foo(T* p) {
delete p; // Undefined behavior
}
struct T {
~T(); // Non-trivial destructor
};
例中 delete 作用于不完整类型的指针 p,会导致未定义的行为。
依据
ISO/IEC 14882:2003 5.3.5(5)-undefined
ISO/IEC 14882:2011 5.3.5(5)-undefined