天天看點

[從C到C++] 1.9 C++ new和delete操作符

在C語言中,動态配置設定和釋放記憶體的函數是malloc、calloc和free,而在C++語言中,new、new[]、delete和delete[]操作符通常會被用來動态地配置設定記憶體和釋放記憶體。

需要注意的是new、new[]、delete和delete[]是操作符,而非函數;new和delete也是C++的關鍵字。

操作符new用于動态配置設定單個空間,而new[]則是用于動态配置設定一個數組,操作符delete用于釋放由new配置設定的空間,delete[]則用于釋放new[]配置設定的一個數組。

“new 資料類型”即為new關鍵字的基本文法,可以動态的配置設定一個資料類型大小的空間。例如:

int *p = new int;           

為p指針配置設定了一個int型的空間。new操作符根據請求配置設定的資料類型來推斷所需的空間大小。

new[] 則是為了配置設定一個數組的空間。具體文法如:

int *A = new int[10];           

該語句為A指針配置設定了一個數組的空間,該數組有10個int數組成員,如果配置設定成功,則p指針指向首位址,并且數組10個成員的位址是連續的,其位址分别為A、A+1、A+2、……、A+9。

delete操作符則專門用于釋放由new配置設定的動态存儲空間,在前面我們為p配置設定了一個int型的空間,我們可以按照如下的方式釋放它:

delete p;           

delete[] 則用于釋放掉由new[]配置設定的數組空間,在前面我們為A指針配置設定了十個int單元,構成了一個數組,可以按照如下方式釋放掉該空間:

delete[] p;           

為了避免記憶體洩露,通常new和delete、new[]和delete[]操作符應該成對出現,并且不要将這些操作符與C語言中動态配置設定記憶體和釋放記憶體的幾個函數一起混用。建議在編寫C++程式時盡量使用new、new[]、delete和delete[]操作符進行動态記憶體配置設定和釋放,而不要使用C語言中記憶體配置設定和釋放的函數,這是因為new、new[]、delete和delete[]操作符可以使用

C++

的一些特性,如類的構造函數和析構函數,能夠更好地管理

C++

程式的記憶體。

繼續閱讀