转载自 link
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来实现。