タグ

2015年7月26日のブックマーク (3件)

  • C++でコンストラクタから例外を送出したい時 - 足跡

    きっと今年最後の思いつき。 一般にコンストラクタから例外を投げるとリソース漏れの危険性が出てくる。 例外を投げた当のオブジェクトが自身のリソースをきちんと処理していなかったり、コンストラクタから例外を投げるクラスをnewした時にインスタンスが宙ぶらりんになっちゃったり。 なのでリソース漏れが嫌ならコンストラクタから絶対に例外を投げないようにすべき。 だがそうすると今度はpublicなエラーチェックメソッドを設ける必要が出たり、空のオブジェクトが存在する事になってしまったりする。 そうすると色々手間が増えてしまったりスマートさが無くなって残念な気持ちになってしまう。表 --- 追記ここから --- コンストラクタから例外を投げる時、そのクラスがnewされたならインスタンス用に割り当てようとした領域は自動で破棄されるらしい。デストラクタ呼ばれないけど。 破棄されるっていう記述も破棄されないって

    C++でコンストラクタから例外を送出したい時 - 足跡
    fa11enprince
    fa11enprince 2015/07/26
    ファクトリかふむふむ
  • [迷信] コンストラクタから例外を送出してはならない | 株式会社きじねこ

    株式会社きじねこは大阪のソフトウェア開発会社です。組込み系・業務系のプログラム開発から電子回路の設計までおまかせください。 比較的有名なサイトで「コンストラクタからの例外送出」が「禁じ手」として紹介されていることもあり、また、最近ではその内容を再編集した書籍が出版されたこともあって、コンストラクタから例外を送出すべきではないと考える人は多いようです。 その根拠となっているのは、コンストラクタから例外を送出した場合、デストラクタが呼ばれないためにリソースリークにつながるというものです。これは、次のようなケースを想定しているものと思われます。 foo::foo() : a(new A), b(new B) { } 確かに、a または b のうち、後から初期化される側で例外が送出されると、他方が解放される機会が失われるため、リークにつながります。しかし、 void foo() { A* a =

    fa11enprince
    fa11enprince 2015/07/26
    とりあえずスマポはいいね
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    fa11enprince
    fa11enprince 2015/07/26
    C++の厄介なところその1ですよね(;´・ω・)