【Effective C++】考虑写出一个不抛出异常的swap函数

swap含义及缺省实现

swap 函数是用来将两个对象的值彼此赋予对方。在缺省情况下,swap的动作可以由STL中提供的 swap 算法来完成,它的实现也很简单:

namespace std
{
   
	template<typename T>
	void swap(T& a, T& b)
	{
   
		T temp(a);
		a = b;
		b = temp;
	}
}

只要 T 支持拷贝构造和拷贝赋值, 缺省的 swap 就会为你完成置换 T 类型对象的工作。


我们可以看到,在这个缺省的实现中,我们进行了三次的拷贝动作,对于某些类型而言,这是必须的;但是对于一些含有指针数据成员的类型来说,这种做法明显会降低速度。这种情况最常见的就是 “ pimpl 手法”,也就是用一个指针去指向一个对象,在那个对象中存在真正的数据。比如说有下面的 Widget 类的实现:

class WidgetImpl {
   
public:
	//...

private:
	int a, b, c;
	std::vector<double> v;
	//...
};

class Widget
{
   
public:
	Widget(const Widget& rhs)
	{
   
		//...
	}

	Widget& operator=(const Widget& rhs)
	{
   
		//...
	}
	//...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值