CPP学习之——堆中数组对象(14.25)

一 概述

本节课主要将堆中数组对象

二 示例一

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
using namespace std;
class area
{
private:
int length, width;
public:
area() {length = 0, width = 0;}
~area() {cout << "调用析构函数释放内存"<< endl;}
void set(int l, int w)
{
length = l;
width = w;
}
int get() {return length * width;}
};
using namespace std;
int main()
{
area *one=new area[10000];
for (int i = 0; i < 10000; i++)
{
one[i].set(4,5);
}
cout << "area[" << 1 << "]" << one[1].get() << endl;
// for(int i=0;i<10000;i++){
// delete one[i];
// }
delete []one;
return 0;
}

2.2 输出结果

1
2
调用析构函数释放内存
。。。。。。。。。。

三 示例二

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;
class area
{
private:
int length, width;
public:
area() {length = 0, width = 0;}
~area() {cout << "调用析构函数释放内存"<< endl;}
void set(int l, int w)
{
length = l;
width = w;
}
int get() {return length * width;}
};
using namespace std;
int main() {
area *one=new area[10000];
for (int i = 0; i < 10000; i++)
{
one[i].set(4,5*i);
}
cout<<one->get()<<endl;
cout<<(one+1)->get()<<endl;
//delete []one;
return 0;
}

四 总结

数组对象在堆中占用多少内存

  • 我们知道一个对象在堆中所占用的内存是根据它所拥有的变量来定义的,假如一个对象拥有4个占4个字节的长整形变量和2个占一个字节的字符变量,那么该对象则占用18个字节的内存空间,同理,假如一个数组中拥有20个这样的对象,那么该数组对象则占用20乘以18等于360个字节的内存空间
  • 指针在内存中的访问也是根据这个原理,pone是指one[0]的地址,假设one[0]占用20个字节,那么pone+5就是访问第6个对象,也就是one[5]的地址,我们几乎不费脑筋就可以推算出,one[5]的地址为数组首地址开始的第100个字节,因为单个对象占用内存乘以编号5等于100