との関係は、私は次のコードを持っている:フォワード宣言とデストラクタ
#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();
}
私はプログラムを実行したが、それは何も印刷されません。
なぜですか?
メインでは、new CFoward
を作成し、func
でデストラクタを呼び出しました。
デストラクタが呼び出されていないようです。どうして?それはとにかくフォワード・デクレレーションに関係していますか?
このコードをコンパイルすると、 'g ++'は実際に何が起こっているかを伝えます。 – fuenfundachtzig
少なくともコンパイラの警告レベルを上げます。これは、常に "不完全な型へのポインタの削除"診断を出すべきです。 –
GCCは非常に役に立ちます: '警告:削除オペレータの呼び出しで検出される可能性のある問題:[デフォルトで有効] 'frw'は不完全な型です[デフォルトで有効] 'CForwardクラス'の前方宣言[デフォルトで有効]クラスが定義されたときに宣言されていても、デストラクタやクラス固有の演算子deleteは呼び出されません。 – juanchopanza