CPP学习之——在构造函数中开辟内存空间(8.14)

一 概述

我们可以将类的数据成员定义为一个指针,然后在构造函数中开辟新空间,将该空间的地址赋给指针。而在析构函数中释放该内存

二 代码及输出

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
class Human
{
private:
int *i;
public:
Human(){cout<<"构造函数执行中..."<<endl;i=new int(999);}
~Human(){cout<<"析构函数执行中..."<<endl;delete i;}
int get(){return *i;}
};
int main()
{
Human Jack;
cout<<Jack.get()<<endl;
Human *p=new Human;
cout<<p->get()<<endl;
delete p;
return 0;
}

2.2 输出结果

1
2
3
4
5
6
构造函数执行中...
999
构造函数执行中...
999
析构函数执行中...
析构函数执行中...

2.3 代码说明

  • 由于int是个整型,不是类对象,所以new int(999)不会调用构造函数,而不是999这个数值存储到新建的内存区域中
  • 在构造函数中开辟新空间,将该空间的地址赋给指针
  • 在析构函数中释放该内存

三 总结

  • 该例仅仅是为了说明构造函数中也可以开辟堆中空间,在实际程序中,一个在堆中创建的对象通过成员指针再创建新空间用来保存数据并没有什么意义。因为在堆中创建对象时已经为它的所有数据成员提供了保存的空间