學了c大家都習慣用malloc申請記憶體。當看到一些c++的**用new會有疑惑,new和malloc的區別是什麼。
malloc是c裡申請記憶體的方法,搭配free釋放記憶體。
new是c++裡申請記憶體的方法,搭配delete釋放記憶體。
雖然這兩句話好像並沒有什麼用。
假如我們有個結構體:
struct node
;
現在我們要新建乙個物件p。
如果用c的寫法,大家會這樣寫。
node* p; p=(node*)malloc(sizeof(node));
而用c++的風格是這樣寫。
node* p; p=new node;
看起來並沒有什麼優越的地方。
但假如我們要對新建的物件初始化呢。
c我們會新建完物件後再進行初始化就是,但是如果要建多個物件。就要初始化多次,看似沒有什麼難點,但是重複的**量會很大。
如果我們用new物件,我們可以把結構體改寫下:
struct node
prefix=0;
}};
大家會發現相比前面c的風格,這裡多了個node()
函式。這種在定義裡面寫的函式叫建構函式。建構函式的作用就是在我們新建物件之後執行的程式,比如我們現在新建乙個物件p,並要對它初始化。
node* p; p=new node();
這裡新建的時候多了個括號,代表的就是在新建p的時候執行這個這個建構函式。也就是申請了記憶體就順便完成了初始化工作。
其實這個括號也可以不寫,因為並沒有相應的引數傳入。但如果我們這樣在新建物件的時候要初始化的內容有不同的要求呢?
struct node
prefix=x; //這裡初始化為傳入的值
}};
那麼我們新建物件的時候只需要:
node* p; p=new node(0);
這裡括號就填寫傳入的值。
其實new在申請記憶體的時候可以理解就是呼叫了malloc函式,再執行建構函式,也就是初始化過程。耗費的時間並不會多多少,但是在**上會更美觀。這可能就是用new最大的特點了。
class node
{ public: int prefix;
public: node* next[kind];
public: node(int x)
{for(int i=0;i看著這個**是不是和之前的結構體定義很像?
結構體可以理解為把類的關鍵字class變成struct,所有的成員屬性去掉。(這個類的所有成員屬性必須是公有的)。
建構函式是類特有的,物件產生被新建的時候就會被執行。
new與malloc的區別
1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...
new與malloc的區別
malloc 與free 是c c 語言的標準庫函式,new delete 是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。對於非內部資料型別的物件而言,光用maloc free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於 malloc...
Malloc與new 的區別
malloc與new 的區別 1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行...