《剑指offer》面试题1:赋值运算符函数

题目的要求是为如下的类型添加赋值运算符函数

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

需要注意的点

  1. 赋值运算应该是要允许连续赋值的,因此赋值符号的返回值应该是当前对象的引用
  2. 形参应该声明为常量引用,否则在传入实参时会因为进行参数的复制构造而浪费了时间和资源
  3. 赋值后应该释放对象本身的内存,预防内存泄漏的发生
  4. 需要判断传入的对象与本对象是不是同一个对象,否则释放资源时可能破坏了对象
  5. 基于保护原始对象的目的,可以使用中间变量的方式

    CMyString& CMyString::operator = (const  CMyString& other)
    {
       if(this!=&other){
           CMyString tmp(other);
    
           char* p_tmp = tmp.m_pData;
           tmp.m_pData = p_Data;
           p_Data = p_tmp;
       }
       return *this;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值