- 1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part61 pc11.2ch.net/test/read.cgi/tech/1205059063/
- 847 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:09:26 ]
- operator newをオーバーライドしたなら、必要なのはメモリの固まりなわけで、
mallocでも呼んどきゃいいんでね?
- 848 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:58:46 ]
- >>847
コンストラクタを呼びたいんじゃね?
- 849 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 18:09:06 ]
- 「new演算子のオーバーライド」で、どのコンストラクタを呼びたくなるわけ?
ひょっとしてたとえば、メモリ管理クラスがあって、operator new()で そのメモリ管理クラスをインスタンス化するためにnewしたくなったけど、 メモリ管理クラスのメモリはどうするんだってな話?
- 850 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 04:35:49 ]
- クラスのメンバ関数が、自分自身をdeleteする処理を行っても
安全なのでしょうか? つまりdelete this;ってことになるかな。 自分自身が解体された後にメンバ関数からリターンするって何か変ですよねぇ。 しかもdelete this;の後にも処理が続いてたらやばいですよね。
- 851 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 06:40:13 ]
- >>850
安全。ただしもちろん、それやったあとにそのインスタンスを使っちゃいけない。 たとえばboost::intrusive_ptrみたいに、値に自身の参照カウンタを持たせるスマートポインタの場合、 値となる型に void Release() { if (!--refCount_) delete this; } みたいなメンバ関数を用意することになる。
- 852 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 06:41:32 ]
- 規格上どうなってるかは知らないけど、そういうことをやってるライブラリは知ってる。
他のメンバーにアクセスせずにリターンするだけなら問題はないような。 実際どっちのデザインがいいのだろ。 A a = A::createInstance(); a.Free(); A::Free(a);
- 853 名前:850 mailto:sage [2008/07/21(月) 06:50:27 ]
- レスありがとうございます。
deleteした後に余計なことしなければ、いけるってことですね。
- 854 名前:デフォルトの名無しさん [2008/07/21(月) 16:09:12 ]
- 現在ublasを使っていて少しつまづいてしまったので教えていただきたいことがあるのですけど
教えていただけないでしょうか? ある行列を多くの行列演算の和として計算したいのですが、 代入を繰り返すことでおそくなってしまいます。 例えば以下のような例です。 for(i=0;i<100;i++){ MAT1+=some_matrix; } some_matrixには毎回べつの行列が計算されてはいります。 expression template でこれを高速可できるということですが、 for文の中で毎回代入していまうとその時点で式が評価されてしまうので遅くなってしまうようです。 式そのものを変数として保持しておくような事はできるのでしょうか? 初歩的な質問ですみませんがどなたかお願いします。
- 855 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 16:15:30 ]
- autoやdecltypeがあればいいんだがなぁ。
- 856 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 16:46:49 ]
- 他の場所で使ってなければ同じ。
- 858 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 18:23:52 ]
- 結果は同じでも、可読性が違う。
乱数の結果が+1してあれば「乱数値を1オリジンに変換している」というニュアンスが伝わるし、 配列のインデックスが-1してあれば「カード番号を0オリジンに変換している」というニュアンスが伝わる。
- 859 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 18:34:07 ]
- 一方、ロシアは0オリジンで乱数値を扱った。
- 860 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 18:39:15 ]
- >>859
そういう無意味な書き込みして楽しい? そうかぁ、寂しい青春送っているんだね。
- 861 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 18:49:41 ]
- >>860
>>860
|

|