C 釋放記憶體的慘痛經驗

2021-06-21 02:04:23 字數 1159 閱讀 9026

有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後老油...