摘要:1、const char* const authorname = "Scott"2、无法用define创建一个class专属常量,因为define并不重视作用域。一量定义 ,它就在其后的编译过程 中都有效3、对于单存常量,最好以const对象或enum替换 define (宏使用的名称未进入记号表) 对于形似函数的宏,最好改用inline函数替换define 参数如果不需要更改,定义为const4、const成员函数。const成员函数才可被const对象调用5、bitwise constness (又称physical constness):不更改对象之任何成员变量(st
阅读全文
摘要:关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast用法:static_cast < type-id > ( expression_r_r )该运算符把expression_r_r转换为type-id类型,但没有运行时类型检查来保
阅读全文
摘要:1: 可以在析构函数中抛异常吗? 不可以! 虽然语法上并没错,但会对整体系统带来重大隐患!!2: 那么如何保证析构不抛异常呢? 2.1)析构里如同构造函数一样,做一些简单的操作。 2.2)如果异常不可避免,那么直接在析构里捕获异常,不要让异常逃离析构函数!3: 析构里抛异常有什么危害呢? 阻止异常传递到析构函数外有两个原因,第一能够在异常转递的堆栈辗转开解(stack-unwinding)的过程中,防止terminate被调用。第二它能帮助确保析构函数总能完成我们希望它做的所有事情。 //////////////////////////////////////////////////////.
阅读全文
摘要:如果每次new出来 ,都要判断是否成功(地址是否为空),那么也挺麻烦的。c++提供set_new_handler,当new失败时,会调用set_new_handler设置的回调函数。functionstd::set_new_handler<new>new_handler set_new_handler (new_handler new_p) throw();Set new handler functionSetsnew_pas thenew handlerfunction.Thenew handlerfunction is the function that is called b
阅读全文
摘要:Using C++ templatesIn C++, you can use a template to declare a set of related:Classes (including structures)FunctionsStatic data members of template classesWithin an application, you can instantiate the same template multiple times with the same arguments or with different arguments. If you use the
阅读全文
摘要:placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; }首先我们区分下几个容易混淆的关键词:new、operator new、placement newnew和delete操作符我们应该都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new,而不是
阅读全文