C++中new和delete來創建和釋放動態數組


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM