堆与栈
栈(Stack)
是存在于某作用域的一块内存空间
例如当调用函数时,函数本身就会形成一个栈来存放它所接受的参数以及返回地址
在函数体内声明的任何变量,其使用的内存块都取自一个栈
栈中的内存空间会被自动清理
堆(Heap)
是由操作系统提供的一块全局内存空间
程序可以动态分配或从中获取若干区块(blocks)
使用new关键字动态取得堆空间,这块空间需要程序员使用delete关键字手动清理
new关键字
new关键字主要进行两个工作——分配内存,调用构造
分配内存
:内部调用malloc(n)分配一块内存,得到一个void*
类型转换
:将上一步得到的void*转换为所需要的类型
构造
:执行构造函数,在分配的这块内存上构造出所需的对象
delete关键字
delete关键字主要进行两个工作——调用析构,释放内存
析构
:调用类的析构函数
释放内存
:内部调用free(ps)释放内存