姚雷 |
May 20, 2008 4:23:16 PM
1.写出下面程序的输出
class abc;
void del(abc *pobj){
delete pobj;
}
class abc{
public:
abc(){
printf("abc\r\n");
}
~abc(){
printf("~abc\r\n");
}
};
int main()
{
abc *pobj = new abc;
del(pobj);
}
源于http://blog.csdn.net/clq271520093/archive/2008/05/08/2416301.aspx的解释如下:
这个考的是类的前置声明导致的问题,函数del只是知道abc是一个类,但是并不知道其析构函数所在的地址,所以无法调用其析构函数,好的编译器在编译的时候会发出警告。打印结果如下:
abc()
如果将类abc的前置声明去掉并将abc的定义放于del()函数之前,则程序正常调用析构函数。
我的疑问是:如果del不知道abc的析构函数所在,那么它又如何知道abc的构造函数所在呢?如果照上述解释,那我只能怀疑要么是C++不严谨,要么就是编译器有BUG。
Comment:
(no reply)