STL的所有容器都没有虚函数
C++11后引入了final关键字可以用来中断类后续的继承行为
当程序在析构的时候, 会从最深处开始析构, 逐步调用析构函数, 因此基类的虚析构需要一个定义, 可以是空定义..., 是先构造基类, 然后逐级向上构造的, 底层构造完成前, 派生类的相关变量都是未定义的....而为了整合这样的工具函数, 最好将它们放到同个"工具"命名空间中(标准库std就是这样的设计思路), 这样用户也方便扩展出自己的工具函数放到命名空间中整理, 同时我们也可也将不同的工具写在不同的头文件中只要它们处于同一个命名空间即可...这个成员swap千万不能抛出异常, 这是条款29的基石协议.
然后在我们自己的命名空间中提供一个非成员的swap函数调用类内的成员swap....这个版本的swap可以有复杂的偏特化
再在std命名空间中提供一个只关于类本身(不允许是模板类)的swap特化, 同样调用我们的成员swap.