多型與new和delete

2021-06-09 23:05:25 字數 803 閱讀 8587

在使用多型時,在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所操作的記憶體全部是在堆區,這個區域的記憶體和棧區是不一樣的,不會自動釋放,...