C++相談室 part62at TECH
C++相談室 part62 - 暇つぶし2ch841:デフォルトの名無しさん
08/07/19 16:56:54
Javaは例外指定必須だけどうっぜえ割に大してバグが減るわけでもない
はっきり言って全くいらない機能

842:デフォルトの名無しさん
08/07/19 23:51:23
同意。C#の設計者もアレあんまし意味無いだろって言ってる品。
URLリンク(www.artima.com)

843:デフォルトの名無しさん
08/07/20 07:52:16
>>838
これって遠近法で描かれたウンコなのかドリルなのか気になる

844:デフォルトの名無しさん
08/07/20 09:28:32
激突
アナル vs ドリル

845:デフォルトの名無しさん
08/07/20 10:54:04
new/delete演算子をオーバーライドしたいのですが、
これらの中からもとのnew/deleteを呼ぶにはどうしたらよいですか?


846:デフォルトの名無しさん
08/07/20 14:57:11
置かれている状況が分からないから何とも言えないけど、
::operator newと::operator deleteでどうよ。

847:デフォルトの名無しさん
08/07/20 17:09:26
operator newをオーバーライドしたなら、必要なのはメモリの固まりなわけで、
mallocでも呼んどきゃいいんでね?

848:デフォルトの名無しさん
08/07/20 17:58:46
>>847
コンストラクタを呼びたいんじゃね?

849:デフォルトの名無しさん
08/07/20 18:09:06
「new演算子のオーバーライド」で、どのコンストラクタを呼びたくなるわけ?

ひょっとしてたとえば、メモリ管理クラスがあって、operator new()で
そのメモリ管理クラスをインスタンス化するためにnewしたくなったけど、
メモリ管理クラスのメモリはどうするんだってな話?

850:デフォルトの名無しさん
08/07/21 04:35:49
クラスのメンバ関数が、自分自身をdeleteする処理を行っても
安全なのでしょうか?
つまりdelete this;ってことになるかな。
自分自身が解体された後にメンバ関数からリターンするって何か変ですよねぇ。
しかもdelete this;の後にも処理が続いてたらやばいですよね。

851:デフォルトの名無しさん
08/07/21 06:40:13
>>850
安全。ただしもちろん、それやったあとにそのインスタンスを使っちゃいけない。

たとえばboost::intrusive_ptrみたいに、値に自身の参照カウンタを持たせるスマートポインタの場合、
値となる型に
void Release() { if (!--refCount_) delete this; }
みたいなメンバ関数を用意することになる。

852:デフォルトの名無しさん
08/07/21 06:41:32
規格上どうなってるかは知らないけど、そういうことをやってるライブラリは知ってる。
他のメンバーにアクセスせずにリターンするだけなら問題はないような。

実際どっちのデザインがいいのだろ。
A a = A::createInstance();
a.Free();
A::Free(a);


853:850
08/07/21 06:50:27
レスありがとうございます。
deleteした後に余計なことしなければ、いけるってことですね。

854:デフォルトの名無しさん
08/07/21 16:09:12
現在ublasを使っていて少しつまづいてしまったので教えていただきたいことがあるのですけど
教えていただけないでしょうか?

ある行列を多くの行列演算の和として計算したいのですが、
代入を繰り返すことでおそくなってしまいます。
例えば以下のような例です。
for(i=0;i<100;i++){
MAT1+=some_matrix;
}
some_matrixには毎回べつの行列が計算されてはいります。

expression template でこれを高速可できるということですが、
for文の中で毎回代入していまうとその時点で式が評価されてしまうので遅くなってしまうようです。
式そのものを変数として保持しておくような事はできるのでしょうか?

初歩的な質問ですみませんがどなたかお願いします。

855:デフォルトの名無しさん
08/07/21 16:15:30
autoやdecltypeがあればいいんだがなぁ。

856:デフォルトの名無しさん
08/07/21 16:36:33
draw_mark = rand() % 4 + 1;
draw_digit = rand() % 13 + 1;

if(h) {
printf("%sの%s\n", mark[draw_mark-1], digit[draw_digit-1]);
}
r = total[draw_digit-1];
この文の+1と-1はあってもなくても結果は同じですよね? 気になったので教えてください

857:デフォルトの名無しさん
08/07/21 16:46:49
他の場所で使ってなければ同じ。

858:デフォルトの名無しさん
08/07/21 18:23:52
結果は同じでも、可読性が違う。
乱数の結果が+1してあれば「乱数値を1オリジンに変換している」というニュアンスが伝わるし、
配列のインデックスが-1してあれば「カード番号を0オリジンに変換している」というニュアンスが伝わる。

859:デフォルトの名無しさん
08/07/21 18:34:07
一方、ロシアは0オリジンで乱数値を扱った。

860:デフォルトの名無しさん
08/07/21 18:39:15
>>859
そういう無意味な書き込みして楽しい?
そうかぁ、寂しい青春送っているんだね。

861:デフォルトの名無しさん
08/07/21 18:49:41
>>860
>>860


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch