c/c++笔记--3

2018-06-17 23:54:20来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1、c++保证删除null指针是安全的,所以析构函数不必在删除指针之前先检查它们是否真正指向某些东西

2、养成良好的习惯:c++不能直接delete野指针,所以一般指针被delete之后,最好立即赋值为NULL,以免再次delete时出现问题。(释放后置NULL,不能释放前置NULL,否则可能造成内存泄漏,例如分配的资源没有释放掉)

任何指针刚被创建时不会自动置为NULL,它的缺省值是随机的,会乱指一通,所以,指针变量在创建的同时应该被初始化,要么将指针设置为NULL,要么让它指向合法的内存。(初始化时置NULL)

 

3、构造函数不能声明为虚函数的原因?(面试题)

c++的构造函数用于创建对象时进行初始化工作,因此在执行构造函数之前对象尚未创建完成,虚函数表尚不存在,没有指向虚函数表的指针,此时无法查询虚函数表,无法知道要调用哪个构造函数。

4、c++的异常处理:在执行程序发生异常时,如果不在本函数中处理,就会抛出一个错误信息,把它传递给上一级的函数来解决,如果上一级也没有处理,就再传给其上一级,由其上一级处理,如此逐级上传,直到最高一级还没有处理的话,系统就会调用terminate函数,此函数会将你的程序结束掉(甚至不等局部对象被销毁)。

因此,为了避免terminate函数在异常传播过程的栈展开机制中被调用,同时为了确保析构函数完成其应该完成的所有事情,我们应该全力阻止异常传出析构函数之外。

5、什么是栈展开机制?                                                                                                                

通俗来说,就是执行这个函数的时候,系统会开辟一个栈帧给它,如果这个函数执行的时候抛出异常,并且异常没有在该函数里面找到相应的catch处理模块,这时在抛出异常前的局部变量就开始销毁,最后整个函数调用的栈帧也会被销毁,异常就传到了调用此函数的函数里,同时在这里寻找catch处理模块,如果此异常还没有catch到,就会销毁该调用函数的栈帧,一层一层的往外推,这样的一个过程就是栈展开。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:pixel art之 hqx 算法

下一篇:C++ 四则运算简单设计