More Exceptional C++
More Exceptional C++
简介:
引言
《More Exceptional C++》(2001)是 C++ 语言顶尖专家之一 Herb Sutter 所著著名问题与解答集的续作。如果说第一本书《Exceptional C++》为深入理解异常、内存管理和类设计奠定了基础,那么第二部则将标准提得更高。作者在此提出了 40 个新问题(Items),分为多个主题章节,涵盖了经典问题(异常安全性、RAII、惯用法)以及更高级的主题:STL 优化、继承的细微之处、模板,甚至多线程问题(在 C++98/03 的背景下)。本书采用“问答”形式:先提出问题,然后进行详细的代码分析、讨论和总结。这不是给初学者看的教科书——这是一本为那些已经能熟练编写 C++ 并希望避免常见陷阱的人准备的谜题集。
本书内容
核心主题是异常安全性和正确的资源管理。Sutter 系统地讲解了如何编写在发生异常时不会“泄漏”的代码,如何使用 RAII(资源获取即初始化)惯用法,以及如何设计能够抵御部分操作失败的类。本书还讨论了:
- 运算符重载规则(特别是 operator= 和 operator[]);
- 使用 STL 容器(std::vector, std::list, std::map)的细微之处;
- “pimpl”(指向实现的指针)和“copy-and-swap”惯用法;
- 多重继承和虚基类的问题;
- 使用模板和策略(policy-based design)进行代码优化;
- 构造函数和析构函数中的错误处理。
每章都包含具体的代码示例,可以直接应用于实际项目。Sutter 不仅提供现成的解决方案,还解释了为什么其他方法有误,以及可能产生什么后果。
适合谁读
本书面向有经验的 C++ 开发人员,他们已经熟悉语法、类、继承和模板。本书对以下人群尤其有用:
- 从事高可靠性系统(金融、电信、嵌入式系统)的程序员;
- 库和框架开发人员,API 的稳定性至关重要;
- 学习高级 C++ 概念的高年级本科生和研究生;
- 所有希望提升调试和重构复杂代码技能的人。
初学者会觉得这本书很难——最好从《Exceptional C++》或 Scott Meyers 的《Effective C++》开始。
读者将学到什么
阅读后,您将能够:
- 在三个级别(basic, strong, nothrow)上保证异常安全性;
- 正确实现赋值和拷贝运算符;
- 避免构造函数中的内存和资源泄漏;
- 优化 STL 容器的使用(例如,避免不必要的拷贝);
- 应用“copy-and-swap”惯用法编写可靠的 operator=;
- 理解何时使用虚继承,何时使用组合;
- 设计考虑析构函数中可能异常的类。
优点
本书的主要优点是实用性。每个问题都附有可以编译和测试的真实代码。Sutter 不害怕展示错误的变体并解释它们为何危险。第二个优点是结构:本书分为短小的章节(2-5 页),便于零散阅读,并可以随时回到复杂的主题。第三个优点是强调异常安全性,即使在 20 年后这仍然具有现实意义:现代 C++(C++11/14/17/20)增加了新工具(移动语义、unique_ptr、optional),但 Sutter 阐述的基本原则并未过时。最后,作者的风格生动,带有一丝幽默和自嘲——这使得