[過去ログ]
Boostを語れゴラァ part3 (1001レス)
Boostを語れゴラァ part3 http://echo.5ch.net/test/read.cgi/tech/1158991211/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
599: デフォルトの名無しさん [sage] 2007/01/11(木) 16:28:02 >>592 他に,対象のオブジェクトを参照している最中に (そのオブジェクトを指している shared_ptr が全て消えることで) 突然そのオブジェクトが死んでしまうような事態を回避することができます. (この問題はマルチスレッドプログラムで特に顕著だと思いますけれど, シングルスレッドプログラムでも論理的にはありえるケースです) void process( weak_ptr< Obj > wp ) { if( shared_ptr< Obj > p = wp.lock() ){ // このスコープ内では, (たとえば他の実行スレッドの動作によって) // p の指しているオブジェクトが削除されるようなことはない } else{ // wp が指しているオブジェクトが死んでいる場合. // ここでどうするかは何を実装するかによります. // wp の参照先が常に生存していることが不変条件ならば, // 571さんの書いているように論理エラーを通知する (例外を送出する) ことに // なるでしょうし,参照先のオブジェクトが死んでいることを検出して // 他のアクションを取るようなことも,場合によっては想定されます. } } http://echo.5ch.net/test/read.cgi/tech/1158991211/599
600: デフォルトの名無しさん [sage] 2007/01/11(木) 16:30:05 また,自身は shared_ptr を必要としないけれど,他の誰かに shared_ptr を渡すような要求がある場合に weak_ptr が必要になります. // 自身は B のオブジェクトへの (弱い) 参照を持っているだけで良いが, // B のオブジェクトへの shared_ptr を返すインタフェイスが必要なクラス class A{ public: shared_ptr< B > getB() const{ return boost::shared_ptr< B >( p_ ); } private: weak_ptr< B > p_; }; あと weak_ptr の使い方として典型的なのが,参照先のオブジェクトが 死んでいてもかまわないような場合です. proxy (特にキャッシュの実装) や observer などの実装で有用な使い方があるかと思います. http://echo.5ch.net/test/read.cgi/tech/1158991211/600
601: デフォルトの名無しさん [sage] 2007/01/11(木) 17:17:34 shared_ptr はソースはそんなに複雑ではないわりに、 enable_shared_from_this や、weak_ptr、shared_ptr<void>、カスタム削除子 への対応など 細かいところでさまざまな工夫が施されているから、一度ソースに目を通しておくと勉強になる。 http://echo.5ch.net/test/read.cgi/tech/1158991211/601
602: デフォルトの名無しさん [sage] 2007/01/11(木) 19:49:50 削除子は勉強になったなぁ http://echo.5ch.net/test/read.cgi/tech/1158991211/602
603: デフォルトの名無しさん [sage] 2007/01/11(木) 20:18:15 今回の人の場合、ソース読むよりスマートポインタのことが書かれた 適当な本読んだほうがよくねえか? いやおまいらが親切なのはよくわかったけどさ http://echo.5ch.net/test/read.cgi/tech/1158991211/603
604: デフォルトの名無しさん [sage] 2007/01/11(木) 20:31:23 カウンタを共有するのがポイント http://echo.5ch.net/test/read.cgi/tech/1158991211/604
605: デフォルトの名無しさん [sage] 2007/01/11(木) 20:56:40 >>603 >適当な本読んだほうがよくねえか? そういう本ある?自分は見たことないんだけれど http://echo.5ch.net/test/read.cgi/tech/1158991211/605
606: デフォルトの名無しさん [sage] 2007/01/11(木) 21:08:05 超定番ながらModern C++ Designじゃないかね? http://echo.5ch.net/test/read.cgi/tech/1158991211/606
607: デフォルトの名無しさん [sage] 2007/01/11(木) 22:49:52 multi_array<double,3> じゃなくて int ndim=3; multi_array<double> a(ndim) みたいな多次元配列の宣言の仕方できないのでしょうか? ndimをプログラム中で変えたいのです http://echo.5ch.net/test/read.cgi/tech/1158991211/607
608: デフォルトの名無しさん [sage] 2007/01/12(金) 09:59:32 多次元配列の大きさを動的に決める方法なかったみたいなので std::map< std::vector<double>, double> m で代用しました。速度で問題でそうな雰囲気もするけど、しかたないかな・・・ http://echo.5ch.net/test/read.cgi/tech/1158991211/608
609: デフォルトの名無しさん [sage] 2007/01/12(金) 11:07:32 >>608 ふつうstd::vector<<std::vector<double> >じゃない? http://echo.5ch.net/test/read.cgi/tech/1158991211/609
610: デフォルトの名無しさん [sage] 2007/01/12(金) 11:09:46 >>608 スレ違いになるが、一次元配列を(動的に)確保して、擬似多次元アクセス関数を作った方が善くないか? http://echo.5ch.net/test/read.cgi/tech/1158991211/610
611: デフォルトの名無しさん [sage] 2007/01/12(金) 11:32:19 >>606 boost::shared_ptr を理解する上で Modern C++ Design はどうなんですかね? あれはスマートポインタについては,削除子による不完全型への対応とか クロス DLL 問題などの突っ込んだ議論は載っていなかったように思いますし, それに boost::shared_ptr の設計思想は, MC++D の一つの柱である 「ポリシーに基づく設計」のそれとは,アンチテーゼの関係にすらあるように思いますし. http://echo.5ch.net/test/read.cgi/tech/1158991211/611
612: デフォルトの名無しさん [sage] 2007/01/12(金) 15:50:59 >>608 …代用できるの? http://echo.5ch.net/test/read.cgi/tech/1158991211/612
613: デフォルトの名無しさん [sage] 2007/01/12(金) 21:54:17 どうみてもコンパイルエラーです。本当にありがとうございました。 http://echo.5ch.net/test/read.cgi/tech/1158991211/613
614: デフォルトの名無しさん [sage] 2007/01/12(金) 23:21:36 >>611 標準C++ライブラリ(背表紙赤い奴)には auto_ptr の詳しい説明と 簡単なカウント式スマポの実装例があったような あとは More Effective C++ とか? http://echo.5ch.net/test/read.cgi/tech/1158991211/614
615: デフォルトの名無しさん [sage] 2007/01/15(月) 10:15:05 「C++再考」のハンドルクラスの実装例なんか、どうっすかね? http://echo.5ch.net/test/read.cgi/tech/1158991211/615
616: デフォルトの名無しさん [sage] 2007/01/15(月) 17:01:38 boost.accumulators いじってるんだけど、数値計算メインの人が MPL勉強するのはちょっとしんどいんじゃないかと思うんだ http://echo.5ch.net/test/read.cgi/tech/1158991211/616
617: デフォルトの名無しさん [sage] 2007/01/16(火) 00:27:28 boostのヘッダーをインクルードすると、 バカみたいにコンパイル時間がかかるのですが、 メモリー増設すれば少しは早くなるのでしょうか? Pentium M 17Ghz Mem 500M VS2005 OS:XP です コンパイルオプションをいじれば少しは早くなるのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1158991211/617
618: デフォルトの名無しさん [sage] 2007/01/16(火) 00:30:17 CPUを速くしろ、と言おうと思ったが十分速いみたいだw http://echo.5ch.net/test/read.cgi/tech/1158991211/618
619: デフォルトの名無しさん [sage] 2007/01/16(火) 00:40:24 プリコンパイル済みヘッダ使えば多少はマシになんじゃない 17GHzもあるとどうかわからんけどw http://echo.5ch.net/test/read.cgi/tech/1158991211/619
620: デフォルトの名無しさん [sage] 2007/01/16(火) 00:46:42 1.7Ghzの間違いでした コンパイル中に、やたらとディスクアクセスする音が聞こえるので ひょっとして500Mで足らないのかと思ったのですが、 そうでもないのですか? http://echo.5ch.net/test/read.cgi/tech/1158991211/620
621: デフォルトの名無しさん [sage] 2007/01/16(火) 01:12:45 そりゃヘッダ含めソースコードが置かれているのはディスクの中だからさ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/621
622: デフォルトの名無しさん [sage] 2007/01/16(火) 01:13:40 環境による。XPと開発環境以外何も入っていないのならspirit使わなければ500MBでも十分。 まあ500MBなんて半端なメモリ容量のPCは相当特殊だろうから俺の意見は参考にならんだろう。 512MBからビデオメモリ用に12MB引っ張ってくようなキモイ統合チップセットは聞いたことないし。 http://echo.5ch.net/test/read.cgi/tech/1158991211/622
623: デフォルトの名無しさん [sage] 2007/01/16(火) 10:43:29 mplとかlambda使うならプリコンパイル済みヘッダは必須だな http://echo.5ch.net/test/read.cgi/tech/1158991211/623
624: デフォルトの名無しさん [sage] 2007/01/16(火) 10:51:49 テンプレートってコンパイル時まで型が決まらないからテンプレートなのに プリコンパイルの効果あるの? それとも全部のパターン分インスタンシエイトしちゃうとか? http://echo.5ch.net/test/read.cgi/tech/1158991211/624
625: デフォルトの名無しさん [sage] 2007/01/16(火) 13:01:41 >>624 2回目以降のコンパイル時には効果絶大だろ。 PCH が無いと、一度インスタンス化した型でもソースファイルが違うと もう一度コンパイルしなきゃいけないし。 http://echo.5ch.net/test/read.cgi/tech/1158991211/625
626: デフォルトの名無しさん [sage] 2007/01/16(火) 13:33:11 >>624 プリコンパイルっても別にオブジェクトコード吐くわけじゃなくて、 プリプロセッサ通して構文解析かけて、コンパイラの内部形式に変換しとく程度でも充分効果あるだろ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/626
627: デフォルトの名無しさん [sage] 2007/01/16(火) 14:06:43 いちいち stfafx.{cpp|h} みたいなのを作らないと いけないのがめんどうだよな。hdrstop とかも指定せずに、 臨機応変にやってくれればいいのに。 って無茶か。 http://echo.5ch.net/test/read.cgi/tech/1158991211/627
628: デフォルトの名無しさん [sage] 2007/01/16(火) 14:23:58 boost::serialization のシリアライズ先は テキスト/バイナリ/XML なんだけど、 吐き出したデータを他の言語処理系から 読みたいときには XML しかないかな? 大量のデータを他の処理系とやりとりするときって、 やっぱり今まで通り独自形式で吐くしかないのかなぁ。 いっそのこと RDBMS のテーブルに吐き出してくれたらいいのに。 って、やっぱ自分で書き出すしかないか。 http://echo.5ch.net/test/read.cgi/tech/1158991211/628
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 373 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s