zoukankan      html  css  js  c++  java
  • C++使用技巧:copy and swap idiom

    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概念(局部变量退出作用域时触发析构函数),解决了自身赋值,强异常保证。





  • 相关阅读:
    STM8s在利用库配置端口的小问题
    ABAP调试
    READ TABLE 的用法
    人在低谷
    力扣 两数之和
    未来选择
    选择
    室友问题该如何解决呢?
    力扣 两数之和
    谈谈自己
  • 原文地址:https://www.cnblogs.com/rogerroddick/p/2846709.html
Copyright © 2011-2022 走看看