美文网首页C++ 杂记
019 赋值运算符最佳实践

019 赋值运算符最佳实践

作者: 赵者也 | 来源:发表于2020-03-24 16:38 被阅读0次

当我们编写赋值运算符时,有两点需要记住:

  1. 如果将一个对象赋予它自身,赋值运算符必须能正确工作;
  2. 大多数赋值运算符组合了析构函数和拷贝构造函数的工作。

当我们编写一个赋值运算符时,一个好的模式是先将右侧运算对象拷贝到一个局部临时对象中。当拷贝完成后,销毁左侧运算对象的现有成员就是安全的了。一旦左侧运算对象的资源被销毁,就只剩下将数据从临时对象拷贝到左侧运算对象的成员中了。

class HasPtr
{
public:
    HasPtr(const std::string &s = std::string()) : ps(new std::string(s)), i(0){}
    HasPtr(const HasPtr &p) : ps(new std::string(*p.ps)), i(p.i) {}
    ~HasPtr() { delete ps; }

    HasPtr& operator=(const HasPtr&p);

private:
    std::string *ps;
    int i;
};

HasPtr& operator=(const HasPtr&p); 的实现:

HasPtr &HasPtr::operator=(const HasPtr &p)
{
    auto tmp = new std::string(*p.ps);
    delete ps; // 释放旧内存
    ps = tmp;
    i = p.i;
    return *this;
}

相关文章

  • 019 赋值运算符最佳实践

    当我们编写赋值运算符时,有两点需要记住: 如果将一个对象赋予它自身,赋值运算符必须能正确工作; 大多数赋值运算符组...

  • 06-JavaScript基础-赋值运算和自增自减

    赋值运算符 简单赋值运算符: = 复合赋值运算符: +=、-=、*=、/=、%= 简单赋值运算符格式: 变量 = ...

  • JavaScript基础--赋值运算和自增自减

    赋值运算符 简单赋值运算符: = 复合赋值运算符: +=、-=、*=、/=、%= 简单赋值运算符格式: 变量 = ...

  • 06-JavaScript基础-赋值运算和自增自减

    赋值运算符简单赋值运算符: =复合赋值运算符: +=、-=、*=、/=、%=简单赋值运算符格式: 变量 = 数据;...

  • 【JavaScript高程总结】远算符

    运算符类型 算数运算符 赋值运算符 赋值运算符用于给变量赋值,最常见的赋值运算符,当然就是等号,表达式x=y表示将...

  • Dart运算符、表达式、类型转换

    Dart运算符: 算术运算符 关系运算符 逻辑运算符 赋值运算符1、基础赋值运算符 2、复合赋值运算符 条件表达式...

  • 005运算符

    python支持以下几种运算符 ·算术运算符 ·赋值运算符 ·复合赋值运算符

  • 运算符与字符串

    运算符 算数运算符、比较运算符、赋值运算符、逻辑运算符比较运算符:>、<、>=、<=、==、!=赋值运算符:=、+...

  • 运算符 - 赋值运算符

    基本赋值运算符=:把=右边的数据赋值给左边 扩展赋值运算符:+=,-+,*=,/=,%=

  • Swift---2.基础运算符

    赋值运算符 算术运算符(+,-,*,/等) 组合赋值运算符 逻辑运算符 == != > < >= <=示例var ...

网友评论

    本文标题:019 赋值运算符最佳实践

    本文链接:https://www.haomeiwen.com/subject/gdodactx.html