Utility 库如何改进你的程序?

  • 编译期断言 BOOST_STATIC_ASSERT

  • 安全的析构 checked_deletechecked_array_delete

  • 禁止复制 noncopyable

  • operator&被重载时用 addressof取得对象地址

  • enable_ifdisable_if控制重载与特化

有些工具还不够组成它们自己的库,因此它们与其它实体被集合到一起。这就形成了 Boost.Utility,收集了一些没有更合适地方存放的、有用的工具。它们很有用,应该被加入到Boost,但它们又太小,不足以形成自己的库。本 章介绍Boost.Utility中最基本的以及最广泛使用的工具。

我们将从 BOOST_STATIC_ASSERT开始,它是一个在编译期判断整型常量表达式的工具。然后,我们看看当你通过一个指向不完整类型的指针delete对象时,即当被删除的对象的内存布局未知时,会发生什么。checked_delete 使得这个讨论更为有趣。我们还会看到 noncopyable 如何防止一个类被复制,这也是本章最重要的主题。然后我们将看到 addressof, 它用于阻止那些重载了operator&的险恶的程序员[1]的病态行为。最后,我们将测试 enable_if, 它非常有用,可用于在名字查找时控制函数重载与模板特化是否被考虑。

[1] 如果你认为我说的不对,请把你认为最合理的重载了operator&的用例发给我。