姚雷

声明前置带来的困惑
姚雷 | 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)
To post your comment, Please login first.