1. 程式人生 > >C++ 類(new和delete運算子)

C++ 類(new和delete運算子)

文章概述

  1. 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效率應該會高點。