2016-08-23 5 views
-1

私は大きな問題があります。私が例外をスローするか、std :: terminateまたはstd :: exitを呼び出すと、オブジェクトデストラクタは実行されません。私はこのステートメントがデストラクタを呼び出すと思っていたので、これは問題です、私のコードはこのステートメントでいっぱいです。すべてのデストラクタを呼び出すには?

どうすればこの問題を解決できますか?私はクラスの構造を変更することはできません、私は10Kのコードと多くのクラスがあります。

void Function(int Stage) 
{ 
    switch (Stage) 
    { 
     case 0: 
      //Somehow call the destructors 
      break; 
     case 1: 
      //initialize 
      break; 
     default: 
      //Give an error message and call the destructors 
    } 
} 
+5

どのようなオブジェクトですか?それらはどのように構築されますか?デストラクタが呼び出されていないことをどのように知っていますか?コードを[MCVE](https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0ahUKEwimx-ihn9fOAhWGWxQKHYyZDVsQFghNMAY&url=http%3A%2F%)で編集してください。 2Fstackoverflow.com%2Fhelp%2Fmcve&usg = AFQjCNEkKReghNZHBJSaky_hwPskMmG0ww&sig2 = ryrpHSHDOO-4HSaxfTgj1w) – wasthishelpful

+1

スマートポインタで読み上げます。あなたに多くの手間を省きます。 – DumbCoder

+4

'main()'に例外ハンドラを追加し、 'std :: terminate'を呼び出さないでください。 – Galik

答えて

1

デストラクタは例外などで自動的に実行する必要があります。これが最初の場所で発明された理由です。

おそらく、newを使用してオブジェクトを作成しましたか?その場合は、明示的にdeleteにする必要があります(デストラクタが実行されます)。

+1

例外ハンドラが見つからない場合、デストラクタは必ずしも呼び出される必要はありません。それは実装の定義です。 – TartanLlama

関連する問題