我在我的代碼中使用了額外的括號。我想,當局部變量的作用域結束後析構函數應該叫,但它並沒有這樣的工作:C++:爲什麼它不調用析構函數?
class TestClass {
public:
TestClass() {
printf("TestClass()\n");
}
~TestClass() {
printf("~TestClass()\n");
}
};
int main() {
int a, b, c;
{
TestClass *test = new TestClass();
}
}
它輸出:
識別TestClass()
所以它不調用TestClass的析構函數,但爲什麼?如果我手動調用它(刪除測試),它會調用析構函數,對。但是爲什麼它不在第一種情況下調用析構函數?
因爲如果你創建了一個對象與'new',它只能調用'它delete'時破壞 - 它不會被走出去的範圍被破壞。 – Nbr44
@ Nbr44:不完全正確。你可以直接調用析構函數。當然,這不會釋放內存,但會破壞對象。然後,沒有未定義行爲的情況下正確釋放內存的唯一方法是在其位置構建另一個相同類型的對象(通過放置新的對象)並調用delete。 –