见 effective c++ 的 条款25 (个人知识点总结)
1、当std::swap 对你的类型不高时,提供一个swap成员函数,并确定这个函数不抛出异常
2、如果提供一个member swap, 也请提供一个non-member swap用来调用前者。对于class(而非template),也请特化std::swap.
3、调用swap时应针对std::swap 使用using声明,然后调用swap并且不用任何” 命名空间资格修饰”。
4、为”用户定义类型”进行 std template 全特化是好的,但是不要尝试在std内加入对std而言全新的东西。
template <typename T>
void doSomething(T& obj1, T& obj2)
{
using std::swap;
swap(obj1, obj2); // 调用最佳swap版本
}
而不要:
template <typename T>
void doSomething(T& obj1, T& obj2)
{
std::swap(obj1, obj2);
}