1. 程式人生 > >拷貝建構函式執行後解構函式呼叫兩次出錯問題

拷貝建構函式執行後解構函式呼叫兩次出錯問題

問題說明:

Oblong(const Oblong &t)           //copy建構函式
 {
   p_width = new int[2];
   p_height = new int[2];


   this->p_width = t.p_width;           //指標地址的複製(錯誤的方式!)
   *(this->p_height) = *t.p_height;    //指標指向的內容的複製(正確的方式!)

 }

  剛開始學習C++,遇到的問題也許比較簡單,但解決了就是自己的。

  昨晚一個晚上就是用了那錯誤的方式,編譯都沒錯,就程式最後執行解構函式釋放記憶體的時候出錯了。今天總算弄清楚了原因,如果用第一種錯誤的方式,會使得兩個指標指向同一個物件,當解構函式釋放一次記憶體時,就會留下一個野指標,因此析構第二次時就會出錯。

  而第二種傳內容的方式使得兩個指標指向不同的地方,所以釋放記憶體就不會出錯。

      對指標的操作一定要慎重,要考慮好是否會產生空指標情況。           60週年了!!!國家生日快樂哈哈!