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是一个类,但是并不知道其析构函数所在的地址,所以无法调用其析构函数。
本文探讨了C++中析构函数的调用问题。通过两个对比案例,解析了为何在某些情况下析构函数不会被调用。关键在于类的前置声明导致编译器无法获取到析构函数的具体地址。
3722

被折叠的 条评论
为什么被折叠?



