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;
};
相关推荐
- 【[C++] 经典的 Copy & Swap-哔哩哔哩】 https://b23.tv/4BxErd6
本文作者:Zijian/TENG(微信公众号:好记性如烂笔头),转载请注明原文链接:https://www.cnblogs.com/tengzijian/p/17066744.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具