swap的功能

swap 的原理

示例

swap函数是一个非常经典又有用的函数,除了它本身用来交换两个对象数值的功能,还可以用来实现异常安全的赋值,避免自赋值(见第11章)等等用途。在std标准库里,swap函数就是这样实现的,和你想的一模一样:

namespace std{
template
void swap(T& a, T& b){
T temp(a);
a = b;
b = temp;
}
}
如果要用在自己定义的类型上,只要能支持拷贝,即拷贝构造函数或者拷贝赋值运算符,功能上std::swap完全能实现你想要的。但你可能也注意到了,这个实现会生成许多拷贝,把a拷贝进temp,把b拷贝进a,最后把temp拷贝进b,一共有三份拷贝。假如要调换两个包含10万个元素的std::vector,这么做要消耗的内存实在是太大了。