用了这么久的C++,才发现C++是目前所有的编成语言中最为复杂的一种,C++之路, 艰难.....
delete void *
这一操作对于一些简单的系统内建类型不会有问题,但如果void*所指向的对象在析构函数里要释放,进行此造作会丢失内存,因为它不执行析构函数,例如:
class CEntity
{
public:
CEntity(char flag);
~CEntity();
private:
void * m_data;
char m_flag;
};
CEntity::CEntity(char flag)
{
m_flag = flag;
cout<<"constructing entity "<<m_flag<<endl;
m_data = new char[100];
}
CEntity::~CEntity()
{
cout<<"destructing entity "<<m_flag<<endl;
delete[] m_data;
}
以上这个类是没什么问题的,但是看以下的调用:
int main(int argc, char* argv[])
{
CEntity * a = new CEntity('a');
delete a;
void * b = new CEntity('b');
delete b;
return 0;
}
其输出为: constructing entity a
destructing entity a
constructing entity b
可见,delete b 的时候没有释放m_data所指向的内存,没有执行析构函数。