我有以下關於一個問題的代碼片段。在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