原文轉載:https://www.cnblogs.com/wft1990/p/5962898.html
在C++編程中,使用new創建數組然后用delete來釋放。
一、創建並釋放一維數組
#include<iostream> using namespace std; int main() { int n; cin>>n; //分配動態一維數組 int *arr=new int[n]; for(int i=0;i<n;i++) cin>>arr[i]; for(int i=0;i<n;i++) cout<<arr[i]<<" "; //釋放arr數組 delete[] arr; return 0; }
注意:delete后面的[]不能少。
二、創建並釋放二維數組
#include<iostream> using namespace std; int main() { int row,col; cin>>row>>col; //為行指針分配空間 int **arr=new int *[row]; for(int i=0;i<row;i++) arr[i]= new int[col];//為每行分配空間(每行中有col個元素) //輸入二維數組的數 for(int i=0;i<row;i++) for(int j=0;j<col;j++) cin>>arr[i][j]; cout<<"*******************"<<endl; //輸出二維數組中的數 for(int i=0;i<row;i++) { for(int j=0;j<col;j++) cout<<arr[i][j]<<" "; cout<<endl; } //釋放二維數組(反過來) for(int i=0;i<row;i++) delete[] arr[i]; delete[] arr; return 0; }
三、new創建類
”new”是C++的一個關鍵字,同時也是操作符。關於new的話題非常多,因為它確實比較復雜,也非常神秘 。 new的過程 當我們使用關鍵字new在堆上動態創建一個對象時,它實際上做了三件事:1、獲得一塊內存空間 2、調用構造函 數 3、返回正確的指針。當然,如果我們創建的是簡單類型的變量,那么第二步會被省略。假如我們定義了如 下一個類A: class A { int i; public: A(int _i) :i(_i*_i) {} void Say() { printf("i=%dn", i); } }; //調用new: A* pa = new A(3); 那么上述動態創建一個對象的過程大致相當於以下三句話(只是大致上): A* pa = (A*)malloc(sizeof(A)); pa->A::A(3); return pa; 雖然從效果上看,這三句話也得到了一個有效的指向堆上的A對象的指針pa,但區別在於,當malloc失 敗時,它不會調用分配內存失敗處理程序new_handler,而使用new的話會的。因此我們還是要盡可能的使用 new,除非有一些特殊的需求。