**:
用c語言中的free函式來釋放c++中的new運算子分配的記憶體,會發生什麼呢? 開始做實驗。
測試**
[cpp]view plain
copy
#include
#define free_memory
intmain()
std::cout <
#ifdef free_memory
std::cout <
<
free(pint);
#else
std::cout <
<
delete
pint;
#endif
for(
inti = 0; i != 5; i++ )
std::cout <
system("pause"
);
return
0;
}
實驗結果
實驗結論
對於簡單資料型別(例如int [ ]),使用new分配記憶體後,可以使用free來釋放上述釋放的記憶體,效果與delete相同。而複雜資料型別( 例如乙個類指標),則不能用free來進行記憶體的釋放,因為free與delete不同,不會執行類的析構函式。
原因分析
參見
C 用new來建立物件和非new來建立物件的區別
我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...
C 用new來建立物件和非new來建立物件的區別
我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...
該怎麼用 new 來分配多維陣列?
有很多方法,端視你對陣列大小的伸縮性之要求而定。極端一點的情形,如果你在編譯期就知道所有陣列的維度,你可以靜態地配置 就像 c 一樣 class fred void manipulatearray 另乙個極端情況,如果你希望該矩陣的每個小塊都能不一樣大,你可以在自由記憶體裡配置之 void mani...