zoukankan      html  css  js  c++  java
  • 剑指 offer set 27 赋值运算符函数

    要求为类 CMyString 定义赋值运算符函数. 

    类的定义如下

    class CMyString {
    public:
    	CMyString(char* pData = NULL; )
    	CMyString(const CMyString &str);
    	~CMyString(void);
    
    private:
    	char* m_pData;
    };
    

      

    在定义一个赋值运算符时, 需要考虑如下几点

    1. 需要把返回值得类型声明定义为该类型的引用, 并且在函数结束前返回实例自身的引用 (*this). 只有返回引用才可以连续赋值

    2. 需要把传入参数的类型声明为常量引用. 形参必须是引用, 否则会编译报错

    3. 需要判断引入的实例是否是当前实例, 如果是同一个那么不进行赋值, 直接返回. 如果不事先判断就直接赋值, 那么在释放实例内存时就会出现严重的问题. 若传入实例释放了自己的内存, 并且 传入实例就是当前实例, 那么不仅没完成赋值, 当前实例也不完整了

    4. 异常安全性. 先创建再复制, 代码如下

    CMyString& CMyString::operator=(const CMyString &str) {
    	if(this != &str) {
    		CMyString strTemp(str);
    		swap(this->pData, str.m_pData)
    	}
    	return *this;
    }
    

      

  • 相关阅读:
    ACM 人见人爱A^B
    ACM Max Factor
    ACM Primes
    ACM Least Common Multiple
    ACM 最小公倍数
    ACM Bone Collector
    ACM 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    ACM Piggy Bank
    ACM 饭卡
    ACM Where is the Marble?
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3564443.html
Copyright © 2011-2022 走看看