默认版本
namespace std
{
template<typename T>
void swap(T & a,T & b)
{
T temp(a);
a=b;
b=temp;
}
}
如果类采用指针存储数据,则默认交换方式会变得低效。因为只用交换两个指针便能实现两个对象的交换。因此需要特化版本的swap,由于指针是私有成员,因此需要一个公有成员函数swap,完成实际的交换。然后由特化版本的swap调用该公有成员函数。我们不能修改namespace std的内容但我们可以为我们自定义类型完全特化标准模板。
全特化版本
class WidgetImpl
{
private:
int a,b,c;
std::vector<int> v;
};