newのタイミングでリソースがどうにもならないのが分かってて、そこで例外を出さないとしたら、実際にリソースの使用がされるメソッドまで例外を遅延させることになるんじゃないの?問題箇所と例外発生箇所が離れる方が害が大きいと思うんだけどな
2010-09-29 11:49:33この件だと、コンストラクタが例外を投げることが問題なのではなくてtry-catch節スコープが分かれること型推論の複合が問題の根源なんじゃないの @bleis http://d.hatena.ne.jp/yaneurao/20100929 話の元ネタ
2010-09-29 11:52:26コンストラクタで投げられる事を禁止されると、コンストラクタで可能なことが大きく制限されて、非常に困るのですよ。 や、もちろん、例外は(メモリ不足などの滅多に起きない物は例外としても)事前のチェックで回避できるべきですが。
2010-09-29 11:52:54リソースは外部で確保してから渡せってこと? @katzchang @nagise リソースの確保はnewさせずに引き渡すべき、でいいのでは?
2010-09-29 11:53:48ボクだったらloan patternで書きます.スコープうんぬをおいといても,いちいちtry...catchとか書くのが面倒 RT @bleis: http://d.hatena.ne.jp/yaneurao/20100929 話の元ネタ
2010-09-29 11:54:53C#のThreadクラスとかコンストラクタを呼んだ後にリソースを確保する奴よりboostのthreadみたいなコンストラクタでリソース確保するやつほうがいいように思えるなぁ コンストラクタ(生成関数)だけほかの関数と仲間外れってどうかと思うし
2010-09-29 11:55:44GC 使っている言語でなんで condtructor で例外はいたらいけないのか分からない。そんな特殊な言語体系あるんかいな? *MZ3*
2010-09-29 11:55:51@nakanishiyasuo なのでやっぱりGCある言語でリソースを内部で(ry なクラスのコンストラクタは例外投げるべきじゃない、と
2010-09-29 11:55:54@nagise 継承自体をあまり使ってないとそんな風に思うかも。コンストラクタでゴチャゴチャやられると、拡張できなくなる。特にデフォルトでやられると死ねます。初期化は別メソッドが良いね。まぁ、それを理由に継承使うなって言う人も多いのだが。
2010-09-29 11:56:04だって怖くね?うっかりtry catchを書き忘れたらリソースリークするんだよ.あとtry catchを書かなくてもコンパイル通るし,たいていの場合はちゃんと動いちゃうんだよ
2010-09-29 11:56:24例外安全教: 例外安全の基本的な(あるいは最小限の)保証を満たすためなら、多少のコスト増を厭わない人間のこと。強い保証をすべての操作に要求する人は例外安全狂。
2010-09-29 11:56:31@nagise そもそもtry-catch使わなければいけないというのが駄目だと思っているのでもしtry(なんとか) { ... とかかけたとしてもそれを強制できないので使いたくないですね
2010-09-29 11:58:08思う。 RT @otf: C#のThreadクラスとかコンストラクタを呼んだ後にリソースを確保する奴よりboostのthreadみたいなコンストラクタでリソース確保するやつほうがいいように思えるなぁ コンストラクタ(生成関数)だけほかの関数と仲間外れってどうかと思うし
2010-09-29 11:58:46@bleis catch書いたら負け(APIとか下回りのぞくのぞく) =>今週末は福岡 http://j.mp/d08WKi
2010-09-29 11:59:18っていうか、C++の場合は、コンパイラによって自動定義されたデストラクタを使い、かつ placement new とかを行わない限り、コンストラクタで例外が投げられてもリークは起きない。
2010-09-29 12:00:46@otf 「生成」関数という他の関数とは違う性質があるので、言語によってリソース確保をどこでやるかが変わるのは当然かな、と。まぁコンストラクタでリソース確保をやらない方がいい言語を批判するならわかりますが
2010-09-29 12:00:47