2017-08-16 74 views
0

我有以下關於一個問題的代碼片段。將新對象重新分配給C++中的靜態類型對象

f() 
{ 
    static V v(10,0);//first argument is size and the second is init val for each element 
    ... 
    v = V(5,0); 
} 

是否先前分配V(10,0)得到自動銷燬當我打電話V(5,0),並在第二行分配到v?或者我必須銷燬它?

由於v是靜態的,因此函數調用中保留的對象V(5,0)

+1

做一些關於賦值如何工作的研究,以及關於***拷貝*** - 賦值運算符'operator ='的工作。 –

回答

1

當我調用V(5,0)並將它分配給v在第二行時,先前分配的V(10,0)是否會自動銷燬?或者我必須銷燬它?

不。該對象在應用程序的整個生命週期內都存在。它的狀態由分配操作改變。

當應用程序終止時,對象被自動銷燬。你不必摧毀它。如果你試圖破壞它,你的程序將會有未定義的行爲。


PS您可以用更好的名字比vV使代碼和討論更有意義。

+0

因此,如果V的構造函數正在執行動態內存分配,那麼我需要通過首先顯式調用析構函數來釋放內存,以清除先前分配的內存。然後再次調用V時,構造函數會再次執行動態內存分配,對吧? – marc

+0

@marc,這不是一個好主意來調用析構函數。您可能需要爲對象的數據取消分配和重新分配內存,但請確保在賦值運算符中不要調用對象本身的析構函數。你可能想看看[copy和swap idiom](https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom)。 –

+0

我調用析構函數,然後在賦值操作中調用構造函數。因爲構造函數的動態內存分配,我將不得不釋放它,以便釋放所有塗在V(10,0)上的內存。這聽起來正確嗎? – marc