2017-10-30 5 views
-5

私はコンストラクタとデストラクタを作成しました。デストラクタが指定されたコードにガベージ値を与えるのはなぜですか?

class A 
{ 
public: 
    int x,y; 
public: 
    A(int x=0,int y=0) 
    { 
    cout<<"Ctor: ("<<x<<","<<y<<")"<<endl; 
    } 

    ~A() 
    { 
    cout<<"Dtor: ("<<x<<","<<y<<")"<<endl; 
    } 
}; 

ただし、デストラクタでは、ガベージ値が表示されています。

int main() 
{ 
    int m,n; 
    cin>>m>>n; 
    A a(8,4); 
    cout<<"main"<<endl; 
    int x=2; 
    if(x) 
    { 
     A a1(m,esult5); 
     A a2(4,5); 
    } 
} 

ソリューション:このコンストラクタで

intput: 5 6 
Ctor: (8,4) 
main 
Ctor: (5,5) 
Ctor: (4,5) 
Dtor: (4197584,0) 
Dtor: (0,0) 
Dtor: (2,0) 
+7

メンバー変数はどこでも初期化しません。 – Justin

+0

また、別のインデントスタイルを見つけてください。このスタイルは一貫性がなく、読みにくいです。 – Justin

+2

'esult5'とは何ですか?私は 'a1'を作成する前または後にその参照を参照しません。また、コードを適切にインデントしてください。 –

答えて

1

 A(int x=0,int y=0) 
     { 
      cout<<"Ctor: ("<<x<<","<<y<<")"<<endl; 
     } 

あなたは2つの引数は0にデフォルト設定持って、メンバ変数と同じ名前を持つ(良いアイデアではありません)。次に、それらの引数を出力し、メンバ変数を初期化しないでください。次に、これらの初期化されていないメンバ変数をdtor(UBにつながる)に出力します。引数の名前を変更するには:

 A(int lx=0,int ly=0) : x(lx), y(ly) 
     { 
      cout<<"Ctor: ("<<x<<","<<y<<")"<<endl; 
     } 
関連する問題