C++数组释放问题
今天做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[]。