我有以下关于一个问题的代码片段。在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?我不完全了解幕后发生的事情。
我有以下关于一个问题的代码片段。在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
对象,然后释放callstack上的空间。
听起来像是时候阅读[赋值操作符](http://en.cppreference.com/w/cpp/language/operator_assignment)。 – tadman