2016-03-28 15 views
2

私はC++プロジェクトの作業をしていますが、デストラクタ内のクラス/構造体からメンバ関数を呼び出す方法を知りたいと思います。私のプロジェクトの残りの部分うまくいっているので、私はちょうどこれはそれを終了するために知っておく必要があります:)デストラクタからメンバ関数を呼び出す方法

~Drink() 
    { 
     cout << "hi"; 
     cout << "I want to know how to summon a member function from a destructor."; 
    } 

    int Drink::dailyReport() 
    { 
     cout << "This is the member function I want to call from the destructor."; 
     cout << "How would I call this function from the destructor?" 
    } 

適切な構文とすべてがいただければ幸いです!デストラクタからメンバ関数を呼び出す方法の例は素敵でしょう!

答えて

2

ここでの問題は、デストラクタは、(それはクラス宣言の外で定義されていると仮定した場合)に関連付けられていることになっているものを、クラスを知らないので、あなたがDrink::

であなたのデストラクタを接頭辞なかったということです、それは呼び出すメンバ関数さえあることを知らない。クラスのデストラクタは、他のメンバ関数のように、基本的には

Drink::~Drink() // this is where your problem is 
{ 
    cout << "hi"; 
    cout << "I want to know how to summon a member function from a destructor."; 
    dailyReport(); // call the function like this 
} 

int Drink::dailyReport() 
{ 
    cout << "This is the member function I want to call from the destructor."; 
    cout << "How would I call this function from the destructor?" 
} 
+0

ああ、ありがとう、私はちょうど変更を編集してくれてありがとう: –

+0

ああありがとう!私はそれがはるかに複雑になると思ったが、私はずっと簡単だとうれしいよ! –

0

:あなたは、クラスのメンバ関数を呼び出すと同じようにメンバ変数を使用することができ、除い:

    はにあなたのコードを書き換えてみ

  1. デストラクタはクリーンアップを目的としており、手動で処理する場合はリソースやダイナミックメモリの割り当てを解除することを念頭に置いておいてください。doはデストラクタに多くあります。

  2. クラスが仮想関数を使用するのに十分複雑なものになった場合は、少しばかげてしまいます。

  3. 提案:はそれを処理せずに例外をスローする可能性さえを持っているデストラクタで何かをしないように注意してください:それは厄介な、見つけにくいバグを導入することができます。

+2

そのため、デストラクタnoexceptを常に宣言しています。常に。 – Vincent

関連する問題