用了這么久的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所指向的內存,沒有執行析構函數。