首页 > 代码库 > 交换操作 swap
交换操作 swap
一个类定义一个swap函数通常需要一次拷贝和两次赋值
例如 A类的两个对象v1与v2交换
A temp=v1; //copy构造一个临时对象
v1=v2; //赋值运算
v2=temp; //赋值运算
如果采用指针交换则可以减少一次拷贝构造
A* temp=v1;
v1=v2; //赋值运算
v2=temp; //赋值运算
分清swap与std::swap的使用
std::swap是标准库定义的,一般内置类型直接用即可,如果涉及自定义的类则使用自定义的swap。
void swap(A& lhs,A& rhs) //A自定义了swap函数 { std::swap(lhs.h,rhs.h); //这是错误的 …… } void swap(A& lhs,A& rhs) //A自定义了swap函数 { using std::swap; swap(lhs.h,rhs.h); //使用了A定义的swap函数 …… }
赋值运算符中使用swap实现copy and swap技术
A& A::operator=(A rhs) { swap(*this,rhs); return *this; }
参数rhs不是一个引用,通过传值方式传递,是右侧运算对象的一个副本。
交换对象后,这个副本会调用析构函数自动删除,delete了交换前的资源。
这个技术的优势是一方面保证了自赋值安全,另一方面就是天然的异常安全。
异常安全体现在代码唯一的抛出异常是构造函数的new表达式,如果发生会在交换之前。
交换操作 swap
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。