new 與malloc 的區別

2021-07-04 07:18:31 字數 1403 閱讀 8812

學了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無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行...