2016-04-15 16 views

回答

1

當一個局部變量超出範圍時,會有一個隱含的析構函數調用。

如果析構函數不能從該範圍訪問,則不能調用它。

+0

#include using namespace std; class Test private: Test(){} }; () { Test * t = new Test; 刪除t; } 該程序無法編譯。 如果我想在它的函數完成exec之前刪除一個對象(局部變量)呢? – 0726

+1

@ 0726:你不能。析構函數就像任何成員函數一樣:如果它是私有的,那麼只有該類的成員(或朋友類的成員)可以調用它。期。通常,具有私有析構函數的類將具有其他方法來刪除該對象,或者至少將其標記爲不再用於某種垃圾回收機制。 –

+0

我不確定這部分對你而言並不明顯。如果析構函數不可訪問,則不能銷燬該對象。如果在析構函數無法訪問的上下文中對於局部變量自動發生破壞,則不能將其用作局部變量。如果由於在析構函數無法訪問的上下文中刪除它而導致銷燬,那麼您無法刪除它。 –

相關問題