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;
}
posted @ 2020-10-19 10:07  mohist  阅读(1002)  评论(0编辑  收藏  举报