<现代C++实战30讲>笔记 01 | 堆、栈、RAII:C++里该如何管理资源?

1、堆(heap),动态分配的内存区域,分配之后需手工释放(new, delete, malloc, free)

    这种方式需要分配内存,释放内存,因此可能会造成内存泄露,或者内存碎片的问题。

2、栈(stack),函数调用过程中,产生的本地变量和调用的数据区域

   分配、释放简单,只需要移动指针即可;后进先出,也不会出现内存碎片。因此对象的分配,也更适合放在栈上。

   但有些时候,对象不能或者不应该放在栈上,包括对象很大,对象的大小在编译时不能确定,对象是函数的返回值,但由于特殊的原因,不应使用对象的值返回。

3、RAII,C++中特有的资源管理方式,通过使用栈和析构函数来实现。并且不限于清理内存,还包括关闭文件,释放同步锁,释放其他重要的系统资源

4、栈展开

    在发生异常时,对析构函数进行调用

5、怎么考虑在栈上分配还是在堆上分配

    凡生命周期超出当前函数的,一般需要用堆(或者使用对象移动传递)。反之,生命周期在当前函数内的,就该用栈

 

posted @ 2019-12-15 10:33  牧马人夏峥  阅读(755)  评论(0编辑  收藏  举报