C++ new一個數組
一、總結
一句話總結:
A、為了讓new分配一個數組對象,我們需要在類型名之后跟一對方括號,在其中指明要分配的對象的數目。
B、int *p = new int[INT_NUM];//方括號中的數必須是整型,但不必是常量
1、c++釋放分配的空間?
delete p; //p必須指向一個動態分配的對象(或空)
delete [] p; //p必須指向一個動態分配的數組(或空)
二、C++ new一個數組
轉自或參考:C++new和數組_TYtrack的博客
https://blog.csdn.net/TYtrack/article/details/90639116
1. new和delete運算符一次分配/釋放一個對象。
2.為了讓new分配一個數組對象,我們需要在類型名之后跟一對方括號,在其中指明要分配的對象的數目。
int *p = new int[INT_NUM];//方括號中的數必須是整型,但不必是常量
3.new T()動態分配一個數組,會得到一個元素類型(T*)的指針。
4.初始化動態分配對象的數組
默認情況下,new分配的對象,不管是單個的還是數組中的,都是默認初始化的。
可以對數組中的元素進行值初始化,方法是在方括號之后跟一對空括號。
-
int* p = new int[5]; //5個未初始化的int
-
int* p2 = new int[5](); //5個初始化為0的int
-
-
string* ps = new string[5]; //5個空string,string是對象,會調用其構造函數進行默認初始化
-
string* ps2 = new string[5](); //5個空string
在C++11中,還可以提供一個元素初始化器的花括號列表,
int* p3 = new int[5]{0, 1, 2, 3, 4};
string* ps3 = new string[5]{"a", "b", "c"}; //前3個進行列表初始化,后2個進行值初始化(為空)
如果列表中的個數小於實際元素數目,剩余的值進行值初始化。
如果列表中的個數大於實際元素數目,則new失敗,不會分配任何內存。
5. 釋放動態數組
-
delete p; //p必須指向一個動態分配的對象(或空)
-
delete [] p; //p必須指向一個動態分配的數組(或空)
如果在delete一個指向數組的指針時忽略了方括號(或在delete一個指向單一對象的指針時使用了方括號),其行為是未定義的。
數組中的元素按逆序銷毀。