在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;
    }

对于具有动态内容的类,还有很多事情要做,但是结果通常是相同的。由于可以忽略赋值运算符,因此理论上可能发生任何事情,但这是我们所期望的。

10-07 19:09
查看更多