アプリ版:「スタンプのみでお礼する」機能のリリースについて

曖昧な記憶なのですが、コントラクタで例外を発生させてはいけないというような記述を見たことがあります。

質問なのですが、
1.そもそも本当にコントラクタは例外を発生させてはいけないのか?
2.なぜコントラクタの例外は問題となるのか?
3.newなどの関数は例外を発生させるが、コントラクタ内でキャッチすれば問題ないのか?

以上、お願いします。

A 回答 (12件中11~12件)

できると思います。


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

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

回答ありがとうございます。
つまり、コンストラクタで例外が発生すると、デストラクタが呼び出されず、
デストラクタで開放を行うものがリークするというわけですね?

対応としては、コンストラクタ内でキャッチして適切に処理すれば良いのでしょうか?

たとえば、newが失敗するなど、その時点でオブジェクトが死に体となったら、try-catchでそれ以前のメモリを開放し、再度throwするなどの対応は問題ないのでしょうか?

お礼日時:2006/09/07 17:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!