C++随笔(一)
2014-03-16 11:43
162 查看
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 、不要在构造函数和析构函数中调用虚函数
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 、不要在构造函数和析构函数中调用虚函数
相关文章推荐
- C++随笔
- C++随笔
- c++随笔
- C++随笔
- C++随笔
- ※C++随笔※=>☆C++基础☆=>※№ 浅谈组合与继承的关系
- C++随笔
- ※C++随笔※=>☆C++基础☆=>※№浅谈指针与引用
- c++随笔
- ※C++随笔※=>☆C++基础☆=>※№推荐几本经典C++书籍 (不断更新中……)
- c++随笔
- ※C++随笔※=>☆C++基础☆=>※№ C语言与C++语言之间关系
- c++随笔
- ※C++随笔※=>☆C++基础☆=>※№C++不定参数的处理实现LOG
- 函数指针--c++随笔
- ※C++随笔※=>☆C++基础☆=>※№ C++文件操作 (fstream)
- C++随笔
- ※C++随笔※=>☆C++基础☆=>浮点型数据在内存中存储的表示
- ※C++随笔※=>☆C++基础☆=>※№→友元●友元函数●友元类●友元模板
- ※C++随笔※=>☆C++基础☆=>※№→C++中 #include<>与#include""