C++常见面试题 | Day6

 

21、什么是智能指针,智能指针的作用,有哪些以及实现原理?

智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以党函数(或程序)结束时会被自动释放;

C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都是由程序员自己管理,程序员自己管理内存可以提高程序效率,但是整体来说对堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄漏等问题,使用智能指针能够更好的管理堆内存。

 

22、模板偏特化是什么?

所谓的偏特化是指提供另一份template定义式,而其本身仍为templatized;也就是说,针对template参数更进一步条件限制所设计出来的一个特化版本。

 

 

23、堆和栈的区别?

数据结构:栈内存是由系统分配,系统释放,以函数为单位进行栈内存分配,函数栈帧、局部变量、形参变量都存储在栈内存上;堆内存是由用户自己分配的,C语言用malloc/free进行申请/释放内存,C++使用new/delete进行申请/释放内存;由于堆内存需要用户管理,所以内存很容易造成泄露,而栈不会;栈的内存分配释放速度很快,效率高,内存都是连续的,而堆的内存分配释放效率低一些,内存不一定连续,容易产生内存碎片,但灵活性较高。

 

虚拟地址空间:栈是由高地址向低地址扩展的连续内存,栈的大小一般为2M或10M;堆是由低地址向高地址扩展的非连续内存,堆的大小影响因素较多,和系统虚拟地址内存的大小有关系。

 

posted @ 2021-07-07 15:07  Season_Chu  阅读(38)  评论(0)    收藏  举报