这让我想到:
class X;
void foo(X* p)
{
delete p;
}
delete p
如果我们甚至不知道是否X
有可见的析构函数,我们怎么可能呢?g++ 4.5.1 给出三个警告:
warning: possible problem detected in invocation of delete operator: warning: 'p' has incomplete type warning: forward declaration of 'struct X'
然后它说:
注意:析构函数和特定于类的操作符 delete 都不会被调用,即使它们是在定义类时声明的。
哇...是否需要编译器来像 g++ 那样诊断这种情况?或者它是未定义的行为?