准则一 仅在确有异常条件下使用异常 顾名思义,异常只适用于确有异常的情况;它们不应该用于一般的控制流程。 // Do not use this hideous code for iteration over a collection!try {Iterator<Foo> i = collection.iterator();while(true) {Foo foo = i.next();}}
This chapter concerns creating and destroying objects: when and how to create them, when and how to avoid creating them, how to ensure they are destroyed in a timely manner, and how to manage any
条款41:了解隐式接口和编译期多态 n classes和templates都支持接口和多态 n 对classes而言接口是显式的,以函数签名为中心,多态则是通过虚函数发生于运行期。 n 对templates参数而言,接口是隐式的,奠基于有效表达式,多态则是通过template具现化和函数重载解析发生于编译器。 条款42:了解typename的双重意义 n 声明模板参数,前缀关键字
条款1:视C++为一个语言联邦 C++包括这四个部分: l C l Object-Oriented C++ l Template C++ l STL n C++高效编程守则视状况而变化,取决于你使用C++的哪一部分 条款2:尽量以const,enum,inline替换#define 下面这个宏夹带着宏实参,调用函数f: #define CALL_WITH_MAX (
第2个经验法则:用遇到多个构造器参数时要考虑使用构建器(consider a builder when faced with many constructor parameters) 上一条讨论了静态工厂相对于构造器来说有五大优势。但静态工厂和构造器有个共同的局限性:它 们都不能很好地扩展到大量的可选参数。 对于需要多参数的类,应该用哪种构造器或者静态工厂来编写呢? 接下来,我将通过Java代
第二部分 vector和容器 第十三条:vector和string优先于动态分配的数组 当你决定用new来分配内存时,将承担以下责任: n 你必须确保以后会有人调用delete来删除所分配的内存,否则将导致资源泄露。 n 你必须确保调用了正确的delete形式。比如单个对象调用delete;分配了数组,则调用delete[]。 n 你必须确保只delete了一次
第一条:慎重地选择容器 C++提供了以下一些容器: n 标准STL序列容器:vector、string、deque和list。 n 标准STL关联容器:set、multiset、map和multimap。 n 非标准序列容器:slist和rope。slist是一个单向链表,rope本质上是一个“重型”string。 n 非标准关联容器:hash_set、hash_multiset