2011-12-26 22 views
-3

私はクラスを持っている:C++デストラクタが呼び出されませんでしたか?

class Rectangle { 
    int width; 
    int height; 
public: 
    Rectangle(int w, int h) { 
     width = w; 
     height = h; 
     cout << "Constructing " << width << " by " << height << " rectangle.\n"; 
    } 

    ~Rectangle() { 
     cout << "Destructing " << width << " by " << height << " rectangle.\n"; 
     } 
    int area() { 
      return width * height; 
    } 
}; 


int main() 
{ 
    Rectangle *p; 

    try { 
     p = new Rectangle(10, 8); 
    } catch (bad_alloc xa) { 
     cout << "Allocation Failure\n"; 
     return 1; 
    } 

    cout << "Area is " << p->area(); 

    delete p; 

    return 0;  
} 

これは非常にシンプルなC++サンプルです。私はLinux g ++でコンパイルして実行します。 は突然、私は"Destructing " << width << " by " << height << " rectangle." のような文字列が表示されるはず ...)delete pは〜長方形(呼び出していませんでしたが、私は....

しなかったが、なぜ? オブジェクトを削除すると、そのオブジェクトのデストラクタを呼び出す必要がありますか?

+0

デストラクタのコードとそれを実際に呼び出すコードを投稿できますか? –

+0

'delete'が呼び出される前に最後に出力されたメッセージは、改行で終了しません。デストラクターメッセージが 'Area is 80'に連結される可能性があります。あなたはそれを見逃している可能性があります。 –

+3

[それは](http://ideone.com/2fTkV)コードを表示する**あなたは**コンパイルして実行しました。 –

答えて

1

行を終了していないため、行は出力されませんでした。印刷に<< endlを追加してください。

+0

YEs ...なんて馬鹿だよ... – barfatchen

+0

好奇心。プログラムが終了したときにバッファがフラッシュされないのはなぜですか? – sharptooth

+0

10×8の四角形を構築します。エリアは80×8の四角形を破棄しています。彼らは1行に合併され、私はそれを逃した! – barfatchen

関連する問題