读书人

delete的一个有关问题

发布时间: 2012-02-13 17:20:26 作者: rapoo

delete的一个问题
#include <iostream>
using namespace std;
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); // delete pobj;
}

这里del(pobj);和delete pobj;有什么区别?
执行结果不一样啊

[解决办法]
问题在于定义函数del()时, 类abc还没有定义.编译器从 "class abc; "语句只知道abc是个类,对它有无析构函数以及析构函数的地址一概不知.因此没法对 "delete pobj "生成调用析构函数的代码(你编译时没注意有warning信息吗?).
把del()的定义放到abc定义的后面,执行结果就一样了.

读书人网 >C++

热点推荐