2017-08-16 57 views
-1

我有以下關於一個問題的代碼片段。在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?我不完全瞭解幕後發生的事情。

+1

聽起來像是時候閱讀[賦值操作符](http://en.cppreference.com/w/cpp/language/operator_assignment)。 – tadman

回答

3
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上的空間。

+0

'operator =(const V&)'是編譯器生成的這個運算符的代碼嗎? – marc

+0

分配給'V(10,0)'的內存空間會發生什麼?這個原始對象是否會被破壞,或者我是否也需要銷燬它? – marc

+0

函數結束時。添加到答案中。 –

相關問題