例如找出令人信服的權威C++中間malloc與new
問題:
非常多人都知道malloc與new都是用來申請空間用的,開闢空間來源於堆中。
可是在C++中卻非常少用malloc去申請空間,為什麼?
以下小編會以一個非常有說服力的樣例來說明。相信大家一看就能明確。
C++程式的格局可分為4個區,注意是“格局”,
1、全域性資料區 //當中全域性變數,靜態變數是屬於全域性資料區
2、程式碼區 //全部的類和非成員函式的程式碼都存放在程式碼區
3、棧區 //為成員函式執行而分配的區域性變數的空間都在棧區
4、堆區 //剩下的那些空間都屬於堆區
當中全域性變數,靜態變數是屬於全域性資料區。全部的類和非成員函式的程式碼都存放在程式碼區。為成員函式執行而分配的區域性變數的空間都在棧區。剩下的那些空間都屬於堆區。
以下來寫個簡單的樣例:malloc.cpp
#include <iostream>
using namespace std;
#include <stdlib.h>
class Test{
public:
Test(){
cout<<"The Class have Constructed"<<endl;
}
~Test(){
cout<<"The Class have DisConstructed"<<endl;
}
};
int main(){
Test *p = (Test*)malloc(sizeof(Test));
free(p);
//delete p;
return 0;
}
編譯執行:The Class have DisConstructed
結果是沒有呼叫建構函式。從這個樣例能夠看出,呼叫malloc後,malloc僅僅負責給物件指標分配空間。而不去呼叫建構函式對其初始化。而C++中一個類的物件構造,須要是分配空間。呼叫建構函式。成員的初始化,或者說物件的一個初始化過程。通過上述樣例希望大家在使用C++中儘量不要去使用malloc。而去使用new。
<span style="font-size:14px;">#include <iostream>
using namespace std;
#include <stdlib.h>
class Test{
public:
Test(){
cout<<"The Class have Constructed"<<endl;
}
~Test(){
cout<<"The Class have DisConstructed"<<endl;
}
};
int main(){
//Test *p = (Test*)malloc(sizeof(Test));
Test *p = new Test;
cout<<"test"<<endl;
//free(p);
delete p;
return 0;
}</span>
執行結果例如以下:
假設想更加系統瞭解C++ new/delete,malloc/free的異同點,能夠參看“深入C++ new/delete,malloc/free解析”瞭解詳情。The Class have Constructed
The Class have DisConstructed
版權宣告:本文部落格原創文章。部落格,未經同意,不得轉載。