【发布时间】:2011-05-18 12:44:53
【问题描述】:
这个让我想到:
class X;
void foo(X* p)
{
delete p;
}
如果我们甚至不知道X 是否有可见的析构函数,我们怎么可能delete p? 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++ 那样诊断这种情况?还是未定义的行为?
【问题讨论】:
-
好笑,昨天才发现这个!
-
仅供参考:Visual C++ 9.0 也显示此类警告...
标签: c++ pointers forward-declaration delete-operator incomplete-type