2017-11-19 17 views
0

私はVisual Studio 2013を使用してテストするいくつかのcoutコマンドを出力します。私のコードをデバッグすると、コントロールは両方のクラスのデストラクタの中に入りますが、コンソールには出力されません。デストラクタはコンソール上に行を印刷しません

#include <iostream> 
using namespace std; 

class Uni 
{ 
public: 
~Uni() 
{ 
    cout << "I am in Uni Destructor" << endl; 
} 

Uni() 
{ 
    cout << "I am in Uni Constructor" << endl; 
} 

}; 


class Student: public Uni 
{ 
public: 

Student() 
{ 
    cout << "I am in Student Constructor" << endl; 
} 
~Student() 
{ 
    cout << "I am in Student Destructor" << endl; 
} 



}; 

int main() 
{ 
    Student s; 
    system("pause"); 
    return 0; 
} 

出力:

私は私はあなたがpause後、すなわち、この時点での出力を取得するとし学生コンストラクタ

答えて

1

にユニコンストラクタ

私はしています。

int main() 
{ 
    Student s; 
    system("pause"); 

    // here; but s is not destroyed yet 
    return 0; 
} 

しかし、その時点でsはまだ破壊されません。宣言されているスコープから外れると、つまり関数mainから出るときに破棄されます。

sをテスト用に追加することができます。

int main() 
{ 
    { 
    Student s; 
    } // s will be destroyed here 

    system("pause"); 
    return 0; 
} 
+0

どのオブジェクトがヒープまたはスタックで作成されますか? – kappo

+0

あなたのコードが動作します、私はより明確にする必要があります – kappo

+0

@kappo Stack。どの部分が十分明確ではないのですか? – songyuanyao

0

あなたのコードは、バッファコンソール出力ストリームオブジェクトインスタンスイストCOUT、正常に見える:あなたのデストラクタメッセージISTはちょうどCOUTの最後の閉じ括弧とフラッシュの後に書かれたことをバッファリングしないことを確信していますか?