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