C++ 類(new和delete運算子)
阿新 • • 發佈:2019-01-26
文章概述
- new和delete運算子
new和delete運算子
a. new/delete 是C++的運算子;類似於malloc/free,程式執行(動態)得開闢記憶體空間(堆);
b. new 可以為內建型別的變數開闢空間,陣列變數,類的物件開闢空間。這是在堆上開闢記憶體,返回一個指向該記憶體空間的地址。
- 內建型別開闢空間
//開闢記憶體並且初始化
int *a = new int(10);
//釋放開闢的記憶體
delete a;
- 陣列變數開闢空間
//開闢記憶體空間
int * arr = new int[5];
//釋放開闢的記憶體
delete[]arr;
- 類物件開闢記憶體
class Test
{
}
//開闢記憶體空間
Test *t = new Test();
//釋放開闢的記憶體
delete t;
我們分析下面的程式碼(看看new/delete除了開闢空間,還會幹什麼?):
//這個例子自己可以試試
class A
{
public:
A() { cout << "建立物件" << endl; }
~A() { cout << "析構物件" << endl; }
};
int main()
{
A* a = new A();
delete a;
return 0;
}
我們得出: new/delete會呼叫類的建構函式和解構函式。
注意: a. new/delete,malloc/free最好匹配使用;
b. new和malloc最大區別: new會呼叫類的建構函式,malloc不會;
c. delete和free同理;new/delete是運算子,malloc/free函式。所以new/delete效率應該會高點。