C++使用技巧:copy and swap idiom

本文介绍了一种在C++中实现深拷贝的CopyandSwap习题,通过使用拷贝构造函数和赋值构造函数来确保强异常安全性,并且演示了一个具体的Person类实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Copy and Swap idiom

使用到著名的Big three中兩個特殊的成員函數(拷貝構造函數copy construction與賦值構造函數assignment constrcution). 作用在于在深拷贝的过程中保证强异常的作用,具体代码如下

class Person
{
public:
	Person(int id, const char * pszName):_id(id), _pszName(new char[strlen(pszName) + 1]){strcpy(_pszName, pszName);}
	Person():_id(0)
	{
		_pszName = new char[1];
		_pszName[0] = '\0';
	}
	~Person()
	{
		if (_pszName)
			delete _pszName;
		_pszName = nullptr;
	}
	int Id(void) const {return _id;}
	const char * Name(void) const {return _pszName;}
	Person(Person& rhs)
	{
		_id = rhs._id;
		_pszName = new char[strlen(rhs._pszName) + 1];
		strcpy(_pszName, rhs._pszName);
	}
	Person& operator=(Person& rhs)
	{
		Swap(rhs);
		return *this;
	}
private:
	void Swap(Person rhs)
	{
		std::swap(_id, rhs._id);
		std::swap(_pszName, rhs._pszName);
	}
private:
	int _id;
	char * _pszName;
};
这里使用了RAII概念(局部变量退出作用域时触发析构函数),解决了自身赋值,强异常保证。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值