编译器生成的赋值运算符是否防止自赋值?
class T {
int x;
public:
T(int X = 0): x(X) {}
};
int main()
{
T a(1);
a = a;
}
即使类成员不是指针类型,我是否总是需要防止自赋值?
编译器生成的赋值运算符是否防止自赋值?
class T {
int x;
public:
T(int X = 0): x(X) {}
};
int main()
{
T a(1);
a = a;
}
即使类成员不是指针类型,我是否总是需要防止自赋值?
这是一个很容易凭经验检查的方法:
#include <iostream>
struct A {
void operator=(const A& rhs) {
if(this==&rhs) std::cout << "Self-assigned\n";
}
};
struct B {
A a;
};
int main()
{
B b;
b = b;
}
class T {
int x;
public:
T(int X = 0): x(X) {}
// prevent copying
private:
T& operator=(const T&);
};