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

时间:2017-08-16 16:26:12

标签: c++11

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

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?我不完全了解幕后发生的事情。

1 个答案:

答案 0 :(得分:3)

V v(10,0);

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

v = V(5,0);

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

....V(5,0).

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

v = .......

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

..........;

表达式已结束,因此编译器调用~V析构函数来销毁临时对象,然后(可能)释放callstack上的空间以便以后重用。

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