程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> delete操作符

delete操作符

編輯:C++入門知識

今天下午試著用了一下static變量,結果發現自己平時在使用delete時的好多錯誤。就因為我把 delete [] pointer 寫成 delete pointer [],讓我調試了將近二十分鐘。   先看一下我當時寫掉static的代碼,當然重點不是static。     [html]  #include<iostream>   using namespace std;   class Test   {       public:           Test()           {                cout<<number<<"++++++++++"<<endl;                number++;           }           ~Test()           {               cout<<number<<"----------"<<endl;               number--;           }           int getNumber()           {               return number;           }       private:           static int number;    //屬於這個類而非單個的對象   };   int Test::number = 0;    //靜態成員在使用前必須初始化   int main()   {        Test* pointer=new Test[3];        cout<<pointer->getNumber()<<endl;        delete [] pointer;        return 0;   }     #include<iostream> using namespace std; class Test {     public:         Test()         {              cout<<number<<"++++++++++"<<endl;              number++;         }         ~Test()         {             cout<<number<<"----------"<<endl;             number--;         }         int getNumber()         {             return number;         }     private:         static int number;    //屬於這個類而非單個的對象 }; int Test::number = 0;    //靜態成員在使用前必須初始化 int main() {      Test* pointer=new Test[3];      cout<<pointer->getNumber()<<endl;      delete [] pointer;      return 0; }運行結果:     [cpp]   1++++++++++                 //執行Test()    2++++++++++   3++++++++++   3                          pointer->getNumber();   3----------                 // ~執行Test()    2----------   1----------     1++++++++++                 //執行Test() 2++++++++++ 3++++++++++ 3                          pointer->getNumber(); 3----------                 // ~執行Test() 2---------- 1---------- new Test[3]生成了三個對象,即執行了三次Test(),所以number++執行了三次,即為3.   在銷毀用new開的數組的時候必須在delete之後添加[ ].否則會造成內存洩漏。將上述代碼中的delete [] pointer 換成delete pointer之後的運行結果如下:     [html]   1++++++++++                 //執行Test()   2++++++++++   3++++++++++   3                          pointer->getNumber();   3----------                 // ~執行Test()     1++++++++++                 //執行Test() 2++++++++++ 3++++++++++ 3                          pointer->getNumber(); 3----------                 // ~執行Test()在銷毀動態數組的時候,如果在delete之後木有[],析構函數就只執行一次。所以在銷毀動態數組掉時候一定要記得加[].    通常在我們銷毀了pointer之後就應該將pointer置NULL,否則pointer將會成為野指針。   在使用delete pointer 的時候只是將pointer所指掉變量清除,並不是將指針變量本身清除,所以在delete前後,pointer本身掉值是不變的,看下面的代碼:     [html]   class Test   {   };   int main()   {        Test* pointer=new Test[3];           cout<<"在delete之前pointer的值  "<<pointer<<endl;        delete pointer ;        cout<<"在delete之後pointer的值  "<<pointer<<endl;        pointer=NULL;         cout<<"pointer置空後的值  "<<pointer<<endl;        return 0;   }     class Test { }; int main() {      Test* pointer=new Test[3];        cout<<"在delete之前pointer的值  "<<pointer<<endl;      delete pointer ;      cout<<"在delete之後pointer的值  "<<pointer<<endl;      pointer=NULL;       cout<<"pointer置空後的值  "<<pointer<<endl;      return 0; }運行結果:     [cpp]   在delete之前pointer的值為  0x8963008   在delete之後pointer的值為  0x8963008   pointer置空後的值為  0     在delete之前pointer的值為  0x8963008 在delete之後pointer的值為  0x8963008 pointer置空後的值為  0所以在將pointer delete之後一定要記得pointer=NULL,否則pointer就會成為野指針....這個危害就不說了.......    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved