在C++中重新分配对象变量时,原始值会怎样?
在下面的代码中,将在堆栈上创建一个对象并将其放置在变量中。然后,在堆栈上创建一个新对象,并将其放置在同一变量中。原始对象会发生什么?它会一直保留在堆栈中,直到变量超出范围为止?
void foo() {
ClassName variable(a, b); // variable created on the stack
variable = ClassName(c, d); // new value for variable created on stack
...
}
最佳答案
发生的是该类的赋值运算符被调用。在大多数情况下,这仅意味着用新对象中的值更新旧对象的内容。因此,如果ClassName
是:
struct ClassName
{
int a;
int b;
ClassName(int a, int b) : a(a), b(b) {}
};
在这种情况下,将调用默认的赋值运算符,它等效于:
ClassName& operator=(const ClassName& other)
{
a = other.a;
b = other.b;
return *this;
}
对于具有动态内容的类,还有很多事情要做,但是结果通常是相同的。由于可以忽略赋值运算符,因此理论上可能发生任何事情,但这是我们所期望的。