喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验,
图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可。
title: c++重学笔记9 - operator=()的陷阱
mathjax: true
date: 2020-03-13 19:35:01
categories: [c++重学笔记]
tags: [c++重学笔记]
keywords: [c++重学笔记]
operator=
定义赋值函数难吗?难,真的特别难,如果你能看出下面的代码中赋值函数的问题,那你就懂为什么难了。
#include <iostream>
using namespace std;
class my_class {
int *p;
public:
my_class &operator=(const my_class &rhs) {
delete p;
p = new int(*rhs.p);
return*this;
}
};
int main() {}
这里的问题其实很明显,这个赋值不支持自我赋值。解决方案可以说在最前面特判掉自我赋值,或者是先拷贝最后再delete,又或者是用拷贝构造函数拷贝一份,然后swap来实现。