C++中,类Class数组长度的问题
2012-08-12 10:40
239 查看
看如下代码:
执行结果如下:
注释掉OperatorNewCls的析构函数~OperatorNewCls()后,执行结果如下:
差别在于OperatorNewCls数组arr的长度:定义析构函数后,长度为1004bytes,arr[-1]为数组元素个数25;注释析构函数后,长度为1000bytes,arr[-1]为随机数。
为什么定义析构函数后,需要存储数组长度?
可能是因为定义析构函数后,意味着用户需要自己控制“堆内存”的释放,因此需要“对数组里的每个对象,逐个调用析构函数”,所以需要存储数组元素个数。
而不定义析构函数时,意味着用户不会自己控制释放“堆内存”,所以就没必要逐个调用析构函数了,所以就没必要存储数组元素个数了。
class OperatorNewCls{ private: // enum {sz=10}; int arr[sz]; public: /*定义析构函数后,sizeof(OperatorNewCls)的值未改变, **但是new OperatorNewCls[size]的值等于(sizeof(OperatorNewCls)*size+4), **因为在new OperatorNewCls[size][-1]未知存放了数组的长度size。 ** **若不定义析构函数, **则new OperatorNewCls[size]的值等于sizeof(OperatorNewCls)*size */ ~OperatorNewCls(){} //该函数必须是public的,且必须是static,尽管可以不显示指定static void * operator new[](size_t size){ cout<<"operator[],size="<<size<<endl; return malloc(size); } }; void test43(){ int size=25; cout<<"sizeof(OperatorNewCls)="<<sizeof(OperatorNewCls)<<endl; int *arr=(int*)new OperatorNewCls[size]; for(int i=-1;i<size;++i){ cout<<"arr["<<i<<"]="<<arr[i]<<"\t"<<endl; } }
执行结果如下:
注释掉OperatorNewCls的析构函数~OperatorNewCls()后,执行结果如下:
差别在于OperatorNewCls数组arr的长度:定义析构函数后,长度为1004bytes,arr[-1]为数组元素个数25;注释析构函数后,长度为1000bytes,arr[-1]为随机数。
为什么定义析构函数后,需要存储数组长度?
可能是因为定义析构函数后,意味着用户需要自己控制“堆内存”的释放,因此需要“对数组里的每个对象,逐个调用析构函数”,所以需要存储数组元素个数。
而不定义析构函数时,意味着用户不会自己控制释放“堆内存”,所以就没必要逐个调用析构函数了,所以就没必要存储数组元素个数了。
相关文章推荐
- 求C++数组长度问题
- C/C++有关子数组和与长度问题
- c++数组长度问题
- C++中用sizeof()计算数组长度问题
- C++中char类型数组的长度问题
- C++中有关数组的相关问题
- 探讨数组与字符串输入的问题(C++版)
- 关于C++中sizeof()、数组长度和函数传参的一点心得
- C/C++中如何获取数组的长度?
- C++用指针变量作为函数的参数接受数组的值的问题的总结
- 如何用C++读取文本文件中的数据存入到一个数组,并且对该数组任意长度求和
- 关于数组做形参,用sizeof测长度的问题
- 最大子数组问题-c++代码实现及运行实例结果
- c++中的变量做数组长度
- C/C++中如何获取数组的长度?
- 雇佣问题随机排列数组(permuteBySorting)-c++代码实现及运行实例结果
- 雇佣问题原址排列给定数组(randomize In Place)-c++代码实现及运行实例结果
- C/C++中如何获取数组的长度
- c++里求数组长度
- C++中如何求数组长度