c/c++笔记--3

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

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

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

 

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

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

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

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

5、什么是栈展开机制?                                                                                                                

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

转载于:https://www.cnblogs.com/Jace-Lee/p/5762015.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值