在C中,我们可以将一个结构分配给另一个结构:
struct vector {
int x, y;
};
int main (void) {
struct vector v1 = {1, 1}, v2;
v2 = v1;
return 0;
}
C ++对象也是如此:
class vector {
public:
int x, y;
vector (int a = 0, int b = 0) : x(a) , y(b){};
};
int main (void) {
vector v1(1, 1), v2;
v2 = v1;
return 0;
}
除了将指针作为成员变量的类,并且我们不想为内存地址分配值,或者可能从不同的类分配对象 - 为什么我们要在第一个中重载=
运算符地点?什么时候这是至关重要的一个例子? (而不是上面的例子?)
答案 0 :(得分:3)
一个重要原因是初始化和赋值的重载允许您从类的值中初始化和分配不同类型的值。例如,您可以将"abc"
的字符串文字分配给const char *
,其类型为std::string
(甚至不是类类型)。
另一个原因是,即使分配的类型与目标相同,您也不一定需要默认语义(成员副本的成员)。例如,当分配智能指针对象时,它可能想要执行引用计数管理,并且还检查自我分配并且在这种情况下什么都不做。
答案 1 :(得分:3)
在许多情况下,定义自定义赋值运算符可能会派上用场。这些是我能想到的: