とっちゃん's Blog

WindowsInstaller に WiX はいかがですか~

目次

Blog 利用状況

ニュース

とっちゃんって?

コミュニティ

@ITの記事

CodeZineの記事

WiX チュートリアル

Windows ユーザー エクスペリエンス ガイドライン

唯一の日本語書籍

記事カテゴリ

書庫

日記カテゴリ

インストーラ関連

旧館

コンストラクタで例外はありか?

ネタ元:わんくま東京勉強会#56 懇親会ふぉろー

おいらも原則「なし派」です。基本的に言語によらず。

 

class A
{
public:
  A(...)
  {
    throw( ... );
  }
};

void hoge()
{
  A a = nullptr;
  try{
    a = new A( ... );
  }
  catch( ... )
  {
  }
  delete a;
}

ま、こういうコードで、メモリーリークを起こさないなら、例外が発生してもいいんじゃないの?とは思いますけどw

少なくとも普段使ってる C++ では、これだとメモリリークが発生してしまうんでだめですね。

投稿日時 : 2011年2月20日 1:24

コメントを追加

# re: コンストラクタで例外はありか? 2011/02/20 12:45 デフォルトの名無しさん

挙げられているコードではメモリーリークは発生しません。

operator new による領域確保が成功した後のコンストラクタが例外によって
中断された場合、対応する operator delete によって領域が解放されるものと
規格で定められています。
5.3.4 New p17
> If any part of the object initialization described above terminates by
> throwing an exception and a suitable deallocation function can be found,
> the deallocation function is called to free the memory in which the
> object was being constructed,

# メモリーリークしないのか! 2011/02/20 15:37 とっちゃん's Blog

メモリーリークしないのか!

タイトル
名前
URL
コメント