在使用多型時,在new和delete時一定要保持原有物件型別,不能在new時就進行強制轉換,否則會在析構時出現問題。其他時候可以使用
如下面的例子:
class cbase
~cbase()
virtual void call()
class cinherit : public cbase
~cinherit()
virtual void call()
呼叫方法1
cbase *p_cb=(cbase*)new cinherit();
p_cb->call();
delete p_cb;
輸出結果:
class cbase 初始化
class cinherit初始化
cinherit call!
class cbase析構 //少了cinherit類的析構函式,造成不可預知的後果,因為是按照cbase類的指標型別delete的!
呼叫方法2
cinherit *p_cb=new cinherit();
((cbase*)p_cb)->call();
delete p_cb;
輸出結果:
class cbase 初始化
class cinherit初始化
cinherit call!
class cinherit析構
class cbase析構 //結果
正確在使用繼承類時,如果要使用多型,最好使用物件指標,不要直接用物件。
new與delete申請記憶體
malloc申請而來的只是記憶體,嚴格地說並不是 物件 new delete的引用就是要解決malloc帶來的問題 4個int,16個位元組 int p int malloc 16 for int i 0 i 4 i 在c 中,用new delete操作符取代malloc free 申請乙個物件 i...
new與delete的過載
include stdafx.h include using namespace std include include new 和delete的過載 new new delete delete 適用於極個別情況需要定製的時候才用的到。一般很少用 宣告可以不加 引數 void operator ne...
深入new和delete小結
new和delete是c 中使用頻率非常高的兩個關鍵字,可以說c 記憶體操作的核心就在於這兩個關鍵字,近幾天閱讀了相關的文章,發現自己對於這兩個關鍵字的理解太過膚淺,因此做了一些個人總結。首先要明確一點,new和delete所操作的記憶體全部是在堆區,這個區域的記憶體和棧區是不一樣的,不會自動釋放,...