• 締切済み

コンストラクタでの例外は不可能なのか。

曖昧な記憶なのですが、コントラクタで例外を発生させてはいけないというような記述を見たことがあります。 質問なのですが、 1.そもそも本当にコントラクタは例外を発生させてはいけないのか? 2.なぜコントラクタの例外は問題となるのか? 3.newなどの関数は例外を発生させるが、コントラクタ内でキャッチすれば問題ないのか? 以上、お願いします。

みんなの回答

  • irigado
  • ベストアンサー率0% (0/0)
回答No.2

できると思います。 ただ、インスタンスが生成されていないのでデストラクタが働かない。 なので、例外を投げる前にメモリ確保したものをきちんと開放してやらないとリークになるから気をつけろって話だったような気がします。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

http://www.cmagazine.jp/src/kinjite/cpp/exception.html と、いうことだそうです。 一言で言うと 「デストラクタが起動しない」からですね。 デストラクタでメモリの開放などを行っているとリークしてしまいます。

shirousa01
質問者

お礼

回答ありがとうございます。 つまり、コンストラクタで例外が発生すると、デストラクタが呼び出されず、 デストラクタで開放を行うものがリークするというわけですね? 対応としては、コンストラクタ内でキャッチして適切に処理すれば良いのでしょうか? たとえば、newが失敗するなど、その時点でオブジェクトが死に体となったら、try-catchでそれ以前のメモリを開放し、再度throwするなどの対応は問題ないのでしょうか?

関連するQ&A

専門家に質問してみよう