说在开始
我相信,在大家使用C++语言编程过程中一定会有这样的一个问题。
Complex c1(1,2);
Complex *p=new Complex(1,2);
这两种方式都是创建对象,那么这两种方式到底有什么区别呢?还有经常有人会提起堆、栈的概念,那又是什么意思呢 ?当然这里的堆和数据结构当中的“堆”还是有一定区别的。在观看侯捷老师的本节视频后,解释了如下几个问题,在这里进行总结。
本节将解释如下的问题:
- 堆和栈的概念、直接创建对象和动态创建对象区别
- 全局对象的声明周期
- new、delete、malloc、free的具体含义,以及他们的工作过程
- delete p和我delete [] p的区别
- 申请到的内存具体内容是什么
堆和栈的概念、直接创建对象和动态创建对象区别
Stack,Heap
Complex c1(1,2)//c1的空间来自stack
Complex *p=new Complex(3);//Complex(3)是一个临时对象,其空间来自heap
什么叫栈(Stack)?什么叫堆(Heap)?
栈是存在某作用域(scope)的一块内存空间(Memory space)。例如,当你调用函数,函数本身即会形成一个stack用来放置它所接受的参数,以及返回地址。其函数本身内声明的任何变量,其所使用的内存块都来自上述的Stack
Heap,是指由操作系统提供的一块全局(global)内存空间,程序可动态分配从其获得若干块。只能动态取得,在程序的任何地方都可以动态获得。
两种内存方式的声明周期
1. c1在方法执行结束后,其生命自然就消失了
2. 从堆当中获取的,需要自己手动去delete,否则一直存在。
全局对象的声明周期
new、delete、malloc、free的具体含义,以及他们的工作过程
new有一个执行构造函数的过程,和malloc
delete有一个执行析构函数的过程和free
delete p和我delete [] p的区别
分配出的内存内容
最后
我可能某些地方解释的不是很合理,欢迎大家指出,我会及时修改,如果大家想看侯捷老师的视频可以联系我。