原文轉載: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,除非有一些特殊的需求。

