之間的關係,我有以下代碼:向前聲明和析構函數
#include <iostream>
using namespace std;
class CForward;
void func(CForward* frw) { delete frw; }
class CForward
{
public:
~CForward() { cout << "Forward" << endl; }
};
int main()
{
func(new CForward);
cin.get();
}
我跑的程序,它印什麼。
爲什麼?
in main,我創建new CFoward
,並在func
我刪除它,並將其稱爲析構函數。
看來,析構函數還沒有被調用。爲什麼?無論如何,這與前瞻性的減損有關嗎?
'g ++'實際上告訴你當你編譯這段代碼時發生了什麼。 – fuenfundachtzig
至少提高編譯器的警告級別。這應該總是發出「刪除指向不完整類型的指針」診斷。 –
GCC非常有用:'警告:在調用刪除操作符時檢測到可能的問題:[默認情況下啓用]'frw'具有不完整類型[默認情況下啓用]'CForward類的前向聲明'[缺省情況下啓用]析構函數,也不會調用特定於類的操作符delete,即使它們是在定義類時聲明的。 – juanchopanza