CPP学习之——对象在栈和堆中的不同(8.15)

一 概述

  • 栈中:一个存储在栈中的对象,如:Human Jack;会在超出作用域时,比如说遇到右大括号,自动调用析构函数来释放该对象所占用的内存

  • 堆中:而一个存储在堆中的对象,如:Human *p=new Human;则需要程序员自行对其所占用的内存进行释放。否则该对象所占用的内存直到程序结束才会被系统回收

二 代码及结果

2.1 栈中

2.1.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
return 0;
}

2.1.2 输出结果

1
2
构造函数执行中...
析构函数执行中...

2.2 堆中

2.2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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 *p=new Human;
//delete p;
return 0;
}

2.2.2 输出结果

1
构造函数执行中...