c++基础之operator =处理

1.注意自我赋值

先看个例子:

class A {};

A a ;
a = a; // 注意这句

可能实际中,你不会这样做,但是实际中,是有可能的,并且这样做,也不违背语法。BUT, 如果上面的例子中, 类A存在成员变量是指针的时候怎么办,自我赋值会发生什么? 1.先将指针释放 2.再见指针的地址赋值给变量。 问题来了: 可能存在浅拷贝而出现野指针的现象,

2. 规避

  • 2.1 方案1: 明确禁止类的“=”。 c++11前,将其定为private即可,c++11后,增加了关键字delete,更为方便,当然也可以使用private的方式规避。
// c++11前
classs A
{
public:
  A(){}
private:
  A& operator = (const A & instance) {}
};


// c++11后
classs A
{
public:
  A(){}
  A & operator = (const A &instance) = delete;
};
  • 2.2 方案2: 判断是否与当前对象相等。 一个例子:
A& operator=(const A& instance) 
{
  // 增加西面的判断,也可规避
  if(this == &instance) 
      return *this;    
  ....

  return *this;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值