用了這么久的C++,才發(fā)現(xiàn)C++是目前所有的編成語(yǔ)言中最為復(fù)雜的一種,C++之路, 艱難.....
delete void *
這一操作對(duì)于一些簡(jiǎn)單的系統(tǒng)內(nèi)建類型不會(huì)有問(wèn)題,但如果void*所指向的對(duì)象在析構(gòu)函數(shù)里要釋放,進(jìn)行此造作會(huì)丟失內(nèi)存,因?yàn)樗粓?zhí)行析構(gòu)函數(shù),例如:
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;
}
以上這個(gè)類是沒(méi)什么問(wèn)題的,但是看以下的調(diào)用:
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
可見(jiàn),delete b 的時(shí)候沒(méi)有釋放m_data所指向的內(nèi)存,沒(méi)有執(zhí)行析構(gòu)函數(shù)。