在 C++ 中重建对象并将其分配给同一类型



我有以下一段代码,我有一个问题。

V v(10,0);//first argument is size and the second is init val for each element
...
v = V(5,0);

当我调用 V(5,0( 并将其分配给第二行中的 v 时,之前分配的 v 会自动销毁吗?是否正在创建类型 V 的新对象并将其分配给 v?我不完全明白幕后发生了什么。

V v(10,0);

编译器将在调用堆栈(而不是堆(上分配一些空间,然后在内存中的该位置调用V(int,int)构造函数来构造对象。

v = V(5,0);

这实际上是几个部分,我将分开:

....V(5,0).

再次:编译器将在调用堆栈(而不是堆(上分配一些空间,然后在内存中的该位置调用V(int,int)构造函数,以构造临时未命名对象。

v = .......

编译器调用v.operator=(const V&)成员,该成员假定将内容从参数(未命名的临时V(复制到命名的v对象。

..........;

表达式已结束,因此编译器调用~V析构函数来销毁临时对象,然后(可能(解除分配调用堆栈上的空间以供以后重用。

当作用域结束时(通常:函数结束时(,编译器将自动调用~V析构函数来销毁命名的v对象,然后在调用堆栈上解分配空间。

最新更新