1.下面的程序为什么不调用析构函数?
class abc;
void del(abc *pobj){
delete pobj;
}
class abc{
public:
abc(){
printf("abc\r\n");
}
~abc(){
printf("~abc\r\n");
}
};
void main(void)
{
abc *pobj = new abc;
del(pobj);
}
2.而下面的程序则会调用析构函数
class abc{
public:
abc(){
printf("abc\r\n");
}
~abc(){
printf("~abc\r\n");
}
};
void del(abc *pobj){
delete pobj;
}
void main(void)
{
abc *pobj = new abc;
del(pobj);
}
3.原因如下:
这里考的是类的前置声明问题,1中函数del()只是知道abc是一个类,但是并不知道其析构函数所在的地址,所以无法调用其析构函数。