我有一个对象,其运算符定义如下:
P& operator +(const P &rhs) {
return P(x + rhs.x, y + rhs.y, z + rhs.z);
}
它没有自定义复制或赋值运算符。
在我直接分配向量内的加法结果后,其中会出现垃圾。
P p1(1.0, 0.0, 0.0);
P p2(0.0, 0.0, 0.0);
vector<P> v(1);
v[0] = p1 + p2; // v[0] now contains garbage.
如果我通过一个变量来做,一切都如预期的那样。
vector<P> u(1);
P q = p1 + p2;
u[0] = q; // u[0] contains correct value.
这种行为的原因是什么?这两种情况有什么区别?