有new當然要delete
new就要delete
這兩句話至死不敢忘。不過最近在delete的時候出現乙個問題。
起因是因為多型!
class cfather
public:
virtual void draw();
class cson : cfather
public:
void draw();
class cdaughter: cfather
public:
void draw();
多型的好處就在於乙個cfather指標指向cson就能呼叫cson的draw,指向cdaughter就能呼叫cdaughter的draw,方便的很。
於是我在乙個list中,把new到的兒子女兒全放進去了。
問題在於,想要delete的時候,只用list::iterator ite***ptr取出指標,然後delete *ite***ptr是不行的,應為這樣只會呼叫cfather的析構函式,而不會呼叫cson或者cdaughter的析構函式,最終會導致記憶體洩露。
解決方法,cfather加乙個變數bool isson,判斷兒子或者女兒
想要delete的時候
if((*ite***ptr)->isson)
cson* s = (cson*)*ite***ptr;
delete s;
}else
cdaughter* d = (cdaughter*)*ite***ptr;
delete d;
或者強制轉換型別
if((*ite***ptr)->isson)
delete (cson*)*ite***ptr;
}else
delete (cdaughter*)*ite***ptr;
**********=分割線*************************
菜鳥就是菜鳥,原來世界沒有這麼複雜。半年後我才發現在c++的世界中,有個叫虛析構函式的東西!!
解決這個問題是在是簡單,只要把父類的析構函式宣告為虛函式就行了。
class father
;class son: public father
~son()
若基類析構函式是虛函式,那麼派生類的析構函式也會是虛函式(不論是否顯式宣告)
Chrome擴充套件外掛程式數次審核被拒的慘痛經歷
在被chtqoitrome商店拒絕不下十次之後,我做的chrome擴充套件外掛程式終於重新上架,我覺得有必要記錄一下,跟大家分享下這個心酸的歷程,以免跳坑里。突然有一天,收到chrome外掛程式的郵件,說我的應用涉及使用者許可權的問題,需要自檢,並提交重新審核。在這之前,我的應用已經發布了很多版本,...
C 記憶體申請 記憶體釋放
在初步學習c 時,遇到分配和釋放。下面進行個人的最簡短的總結 規則1 用malloc或new申請記憶體之後,應該立即檢查指標值是否為null。防止使用指標值為null的記憶體。規則2 不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。規則3 避免陣列或指標的下標越界,特別要當心...
在北京創業三個月的慘痛經歷
不要把90後這個標籤當成創業的資本,不要把所有希望放在融資上,那些來自 公司的高管並不能幫助你什麼,還有就是要找個認可你的投資人。90後最大的弱點 其實大多數90後都是天不怕地不怕,但這也是我們90後的弱點,太過於自信。其實自信在創業中是非常好的雞湯,但是一旦碰到某些在市場上摸滾打爬多年的80後老油...