naa*_*vis 8 c++ memory stack memory-management
在C++中重新分配对象变量时,原始值会发生什么变化?在下面的代码中,对象被创建到堆栈上并放在变量中.然后在堆栈上创建一个新对象并将其放在同一个变量中.原始对象会发生什么?在变量超出范围之前,它是否会保留在堆栈中?
void foo() {
ClassName variable(a, b); // variable created on the stack
variable = ClassName(c, d); // new value for variable created on stack
...
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*ler 10
会发生什么是调用类的赋值运算符.在大多数情况下,这意味着旧对象的内容使用新对象的值进行更新.所以如果ClassName是:
struct ClassName
{
int a;
int b;
ClassName(int a, int b) : a(a), b(b) {}
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将调用默认赋值运算符,它等效于:
ClassName& operator=(const ClassName& other)
{
a = other.a;
b = other.b;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
对于具有动态内容的类,可能会有更多事情要做,但结果通常是相同的.由于赋值运算符可以被覆盖,理论上可以发生任何事情,但这正是我们所期望的.