C++随笔(一)

1、

C++中对数据成员中的const值或者引用的初始化必须放在初始化列表,因为这两种数据只能初始化一次,而初始化列表是数据被初始化的地方。

2、

如果不想让一个类提供拷贝函数,则将拷贝函数声明为private,且不做实现。这样可以阻止继承类和友元调用拷贝函数。当继承类的拷贝函数工作时,会调用基类的拷贝函数,如果基类的拷贝函数是private的,就会编译报错。

3、多态

C++ specifies that when a derived class object is deleted through a pointer to a base class with a non-virtual destructor, results are undefined.What typically happens at runtimes is that the derived part of the object is never destroyed.通过一个基类指针去析构一个继承类的对象时,会先调用继承类的析构函数,再调用基类的析构函数,因此你,析构函数都要有函数体,否则编译报错。

基类中含有虚函数,是为了继承类重写。当一个基类含有虚函数(析构函数以外),通常需要一个虚析构函数。如果一个类不含有虚函数,则不要使用虚析构函数。


如果想声明一个抽象类,最好的办法就是把析构函数声明为纯虚函数。


4、防止析构函数抛出异常

C++中abort()和exit()的区别:

    按面向对象的思想,程序也是一个对象,因此,程序也有生有死。
C++在编译一个程序后,这样执行程序:(1)执行开工函数,此时对
程序初始化,主要指全局变量初始化。(2)调用main函数。(3)执行
收工函数,对全局变量(对象)进行析构。所以如下程序会有输出,
尽管main函数为空:
    #include <stdio.h>
    int  x=printf("ABCDEF");
    void main( ){ }
    现在,来谈abort和exit以及return的区别。return返回,可析构
main或函数中的局部变量,尤其要注意局部对象,如不析构可能造成
内存泄露。exit返回不析构main或函数中的局部变量,但执行收工函数,
故可析构全局变量(对象)。abort不析构main或函数中的局部变量,也不
执行收工函数,故全局和局部对象都不析构。
    所以,用return更能避免内存泄露,在C++中用abort和exit都不是好
习惯。

为了避免在析构函数中抛出异常,可以在在try...catch中使用

std::abort()终止异常的抛出,或者在catch语句中什么也不做,将异常信息吞掉,但这样的做的前提是确保程序忽略这个异常可以继续正常运行。

5 、不要在构造函数和析构函数中调用虚函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值