我有以下一段代码,我有一个问题。
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
对象,然后在调用堆栈上解分配空间。