C++ 实现复制赋值运算符重载

考察点

  • 返回值类型 MyClass&,可以连续赋值
  • 参数类型:(const MyClass& rhs) 或者 (MyClass rhs) 值传递(copy-swap)
  • 自赋值安全
  • 无内存泄漏,旧值需要析构
  • 异常安全

参考实现

copy-swap 惯用法

BennyHuo

class MyString1 {
 public:
  friend void swap(MyString1& lhs, MyString1& rhs) noexcept {
    using std::swap; // ADL: Argument-dependent lookup
    swap(lhs.pData, rhs.pData);
  }

  MyString1& operator=(MyString1 rhs) {
    // 参数 rhs 已经复制,无需再次创建副本
    using std::swap;
    swap(*this, rhs);
    return *this;
  }

 private:
  char* pData = nullptr;
};

剑指 Offer

class MyString2 {
 public:
  MyString2& operator=(const MyString2& rhs) {
    //  参数类型是 const 引用,需要创建 rhs 副本
    MyString2 tmp(rhs);

    auto pTmp = tmp.pData;
    tmp.pData = pData;
    pData = pTmp;

    return *this;
  }

 private:
  char* pData = nullptr;
};

相关推荐

posted @   Zijian/TENG  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示