1、指针和数组的区别
1.cpp:
char ia[] = 'Hello';
2.cpp:
extern char ia[]; //这里不能用extern char *ia;
print(ia);
2、构造函数,析构函数的异常处理
C++在执行构造函数过程中产生异常时,是不会调用对象的析构函数的,而仅仅清理和释放产生异常前的那些C++管理的变量空间等,之后就把异常抛
给程序员处理。所以,如果在C++的构造函数中发生异常时,已经创建的东西必须被释放掉,然后再重新抛出给上层调用代码处理,这才是C++构造函
数中正确的异常处理方法。(聪明程序员还可以找到另外一种不用try...catch来处理构造异常的方法,那就是C++标准类库的那个著名的auto_ptr,它
巧妙的利用C++推出作用域时会自动释放变量的机制,来清理其维护的对象)。
禁止异常信息传递到析构函数外:
有两种情况会条用析构函数,第一种是在正常情况下删除一个对象;第二种是异常传递的堆栈辗转开解过程中,由异常处理系统删除一个对象。注意
第二种情况,也就是如果在一个异常被激活的同时,析构函数也抛出异常,并导致程序控制权转移到析构函数外,C++将调用terminate函数。此外,
不允许异常传递到析构函数外面还有第二个原因:如果一个异常被析构函数抛出而没有在函数内部捕获住,那么析构函数就不会完全运行,无法完成
希望它做的所有事情。
1.cpp:
char ia[] = 'Hello';
2.cpp:
extern char ia[]; //这里不能用extern char *ia;
print(ia);
2、构造函数,析构函数的异常处理
C++在执行构造函数过程中产生异常时,是不会调用对象的析构函数的,而仅仅清理和释放产生异常前的那些C++管理的变量空间等,之后就把异常抛
给程序员处理。所以,如果在C++的构造函数中发生异常时,已经创建的东西必须被释放掉,然后再重新抛出给上层调用代码处理,这才是C++构造函
数中正确的异常处理方法。(聪明程序员还可以找到另外一种不用try...catch来处理构造异常的方法,那就是C++标准类库的那个著名的auto_ptr,它
巧妙的利用C++推出作用域时会自动释放变量的机制,来清理其维护的对象)。
禁止异常信息传递到析构函数外:
有两种情况会条用析构函数,第一种是在正常情况下删除一个对象;第二种是异常传递的堆栈辗转开解过程中,由异常处理系统删除一个对象。注意
第二种情况,也就是如果在一个异常被激活的同时,析构函数也抛出异常,并导致程序控制权转移到析构函数外,C++将调用terminate函数。此外,
不允许异常传递到析构函数外面还有第二个原因:如果一个异常被析构函数抛出而没有在函数内部捕获住,那么析构函数就不会完全运行,无法完成
希望它做的所有事情。
3,右值引用(C++0x特征)
http://www.cnblogs.com/solo/archive/2010/04/19/1715607.html
http://www.cnblogs.com/oiramario/archive/2010/10/11/1847802.html