在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++
程式的記憶體。