今天做2級題時遇見一個小問題:
當時代碼我的修改如下:
1 // proj1.cpp 2 #include <iostream> 3 using namespace std; 4 5 class MyClass { 6 public: 7 MyClass(int len) 8 { 9 array = new int[len]; 10 arraySize = len; 11 for(int i = 0; i < arraySize; i++) 12 array[i] = i+1; 13 } 14 15 ~MyClass() 16 { 17 // ERROR **********found********** 18 delete array; 19 } 20 21 void Print() const 22 { 23 for(int i = 0; i < arraySize; i++) 24 // ERROR **********found********** 25 cout << array[i] << ' '; 26 27 cout << endl; 28 } 29 private: 30 int *array; 31 int arraySize; 32 }; 33 int main() 34 { 35 // ERROR **********found********** 36 MyClass obj(10); 37 38 obj.Print(); 39 return 0; 40 }
運行成功以后沒問題,可是第18行給我判錯。

一直以來關於數組的問題,我一直以為 array[]和array沒啥區別,但是查了相關資料:
- array代表這個數字,它相當於一個指針,指向第一個元素(&a[0]),即指向數組的首地址,數組中的其他元素可以通過array的位移得到,此時的進階是以數組中單個的元素類型為單位的
-
array[]代表的不是取array[]這個變量的地址,而是取數組元素的地址。雖然array[]和array得內存地址相同,但它們的意義不相同,它是代表整個數組的,它的進階單位是整個數組的字節長度
而且關於Delete和Delete[]我的理解也存在誤區:
http://blog.csdn.net/shandaliuyan/article/details/5930719
總結最后的使用原則就是:new 和 delete、new[] 和 delete[] 對應使用,數組選擇使用delete[]。
