首页 > 其他 > 详细

剑指 offer set 27 赋值运算符函数

时间:2014-02-25 11:19:47      阅读:289      评论:0      收藏:0      [点我收藏+]

要求为类 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;
}

  

剑指 offer set 27 赋值运算符函数

原文:http://www.cnblogs.com/xinsheng/p/3564443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!