[過去ログ]
Boostを語れゴラァ part3 (1001レス)
Boostを語れゴラァ part3 http://echo.5ch.net/test/read.cgi/tech/1158991211/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
556: デフォルトの名無しさん [sage] 2007/01/06(土) 15:22:57 >>554 皆知ってるかは知らんが、自分で結論出せないのなら 完全に理解できてないってことだ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/556
557: デフォルトの名無しさん [sage] 2007/01/06(土) 15:45:06 そりゃ完全に理解できてないから訊いてるんだろ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/557
558: デフォルトの名無しさん [] 2007/01/06(土) 15:48:06 >555 単にポインタに置き換えるだけだと、自動で消えないからマズいんですよね?? weak_ptrなら、相互参照の片方が消えたら自分も消えるんでウマいこと いくってことでOK? >556 結論を出してみたけど間違ってたまま覚えてたらまずいんで 合ってるのかどうかだけでも教えてください http://echo.5ch.net/test/read.cgi/tech/1158991211/558
559: デフォルトの名無しさん [sage] 2007/01/07(日) 03:14:24 boostのUnitTestってCppUnitと比べてどんな感じですか? http://echo.5ch.net/test/read.cgi/tech/1158991211/559
560: デフォルトの名無しさん [sage] 2007/01/07(日) 03:26:17 マグロとイカフライみたいな感じかな http://echo.5ch.net/test/read.cgi/tech/1158991211/560
561: デフォルトの名無しさん [sage] 2007/01/07(日) 03:32:22 >>560 ありがとうございました http://echo.5ch.net/test/read.cgi/tech/1158991211/561
562: デフォルトの名無しさん [sage] 2007/01/07(日) 05:51:31 ちょww http://echo.5ch.net/test/read.cgi/tech/1158991211/562
563: デフォルトの名無しさん [] 2007/01/07(日) 13:58:09 weak_ptrにいれたshared_ptrのカウントと、weak_ptrのカウントが 同じカウントになるような気がする。 つまりshared_ptrが消えるときにweak_ptrのカウントもゼロになって 同時に消える仕掛けになってると考えていいんでしょうか先生? http://echo.5ch.net/test/read.cgi/tech/1158991211/563
564: デフォルトの名無しさん [] 2007/01/07(日) 15:19:12 ちがった・・・入ってるshared_ptrが消えてもweak_ptrのカウントは1残った… それまではカウント同じなのになぜ?? http://echo.5ch.net/test/read.cgi/tech/1158991211/564
565: デフォルトの名無しさん [sage] 2007/01/07(日) 20:29:47 >>558 >単にポインタに置き換えるだけだと、自動で消えないからマズいんですよね?? いや, weak_ptr の機能は参照先のオブジェクトの生存管理と直接は無関係です. 普通のポインタで参照していようが, weak_ptr で参照していようが, shared_ptr による参照カウントが0になればそのオブジェクトは消えます. 単なるポインタと比較した場合の weak_ptr の利点は, -参照先のオブジェクトが生存しているかどうかを調べることができて,かつ -shared_ptr に格上げできる ことです. いずれにせよ, shared_ptr による循環参照の問題の解決するにあたって, 必ず weak_ptr の機能が必要になるわけではないです. 単に weak_ptr の機能を理解しようとするだけなら, 循環参照の問題はとりあえず脇に置いておいた方が良いような気がします. http://echo.5ch.net/test/read.cgi/tech/1158991211/565
566: デフォルトの名無しさん [sage] 2007/01/07(日) 20:46:53 >>563 shared_ptr の実装は,参照カウントによって管理されるオブジェクト (A とします) と独立して,新たにフリーストア (ヒープ) 上に 参照カウント用のオブジェクト (X とします) を生成します. X は, A の参照カウントと独立して自分自身の参照カウントも持っていて, 独立した2つの参照カウントを持っているイメージになります. shared_ptr が1つ作られるごとに A の参照カウントと X の参照カウント両方が 1つ増やされ, shared_ptr が1つ破壊されるごとに A の参照カウントと X の参照カウント両方が1つ減らされます. weak_ptr が1つ作られるごとに X の参照カウントのみが増やされ, weak_ptr が1つ破壊されるごとに X の参照カウントのみが減らされます. A の参照カウントが0になれば A を delete します. しかし, X の参照カウントが0になっていなければ X は破壊されません. 最終的に全ての shared_ptr と weak_ptr が存在しなくなった時点で, X の参照カウントは0になります.この時点で X は delete されます (自殺します). 以上が, shared_ptr と weak_ptr の実装面での動作です. http://echo.5ch.net/test/read.cgi/tech/1158991211/566
567: デフォルトの名無しさん [] 2007/01/08(月) 03:42:00 >>566 うそ〜ん??shared_ptrはカウントを二種類持ってるってこと? あ、sp_countと内部のweak_ptrの二種類のことを言ってる?? http://echo.5ch.net/test/read.cgi/tech/1158991211/567
568: デフォルトの名無しさん [] 2007/01/08(月) 04:04:00 >weak_ptr が1つ作られるごとに X の参照カウントのみが増やされ, >weak_ptr が1つ破壊されるごとに X の参照カウントのみが減らされます. shared_ptr<A> hoge(new A); cout << hoge.use_count() << endl; weak_ptr<A> hogehoge(hoge); cout << hoge.use_count() << endl; cout << hogehoge.use_count() << endl; 試してみたらどっちも増えなかったよ http://echo.5ch.net/test/read.cgi/tech/1158991211/568
569: デフォルトの名無しさん [sage] 2007/01/08(月) 10:57:47 >>568 weak_ptrのuse_countはweak_countを返すわけじゃないよ。 ドキュメント読め。 http://echo.5ch.net/test/read.cgi/tech/1158991211/569
570: デフォルトの名無しさん [sage] 2007/01/08(月) 18:09:37 Boost.Timeseries Boost.Accumrator は結局アクセプトされたの? http://echo.5ch.net/test/read.cgi/tech/1158991211/570
571: デフォルトの名無しさん [sage] 2007/01/09(火) 13:46:37 オブジェクトを参照している最後の shared_ptr が破棄されるとき、 weak_ptr の有無にかかわらず、そのオブジェクトは削除される。 ただし、オブジェクトを参照する weak_ptr が存在していた場合、 参照カウントを保持する sp_counted_impl_pd は削除されない。 (weak_ptr と shared_ptr すべてが破棄されないと削除されない為) weak_ptr からポインタ参照を行いたい場合、 必ずロックして shared_ptr を取得するような設計になってるけど、 上記仕組みのおかげで、たとえ shared_ptr が存在しない状態でも オブジェクトが破棄されていることが分かり、エラーを返すことが出来る。 http://echo.5ch.net/test/read.cgi/tech/1158991211/571
572: デフォルトの名無しさん [sage] 2007/01/09(火) 16:13:31 Statistical Distributions and Mathematical Special Functions のレビューコメントが厳しいのばっかりなのはなんで? 最初 Boost.Mathとか名前ついてたときは、 ちょっと広すぎな名前だとは思ったけど http://echo.5ch.net/test/read.cgi/tech/1158991211/572
573: デフォルトの名無しさん [sage] 2007/01/09(火) 16:49:03 >>572 >Statistical Distributions and Mathematical Special Functions 興味あるんだけどどのへん見ればいいの? ポインティングよろしく http://echo.5ch.net/test/read.cgi/tech/1158991211/573
574: デフォルトの名無しさん [sage] 2007/01/09(火) 17:14:44 http://boost-consulting.com/vault/index.php?PHPSESSID=bq352onkg7ogdbu4lundegolg1&direction=0&order=&directory=Math%20-%20Numerics の math-toolkit-code.tar.bz2 http://echo.5ch.net/test/read.cgi/tech/1158991211/574
575: デフォルトの名無しさん [sage] 2007/01/09(火) 17:25:00 >>574 Thanks! http://echo.5ch.net/test/read.cgi/tech/1158991211/575
576: デフォルトの名無しさん [sage] 2007/01/09(火) 18:12:22 >>548-571 通りすがりだけど、このやり取りで、weak_ptrがすっごくよく分かった! 日本語でこれだけちゃんとした説明はどこにもないと思う。ありがとう! http://echo.5ch.net/test/read.cgi/tech/1158991211/576
577: デフォルトの名無しさん [] 2007/01/10(水) 21:17:34 shared_ptrなんだけど、中にいれるオブジェクトが消えると カウントが減りますよね。 でも、中のオブジェクトが消えたということを、shared_ptrはどうやって知るんですか? 代入演算子で上書きされたときについては、代入演算子の多重定義で 上書きされたほうをデクリメントしてるのは分かるんだけど、 スコープを抜けたときとかはshared_ptrには分からんのでは? リアルタイムにオブジェクトが生きてるかどうかを監視してるわけでもないのに、 スコープ抜けてオブジェクトが自然消滅したときにもちゃんとカウントが 減ってるのって不思議すぎる。これ分かる人いる? http://echo.5ch.net/test/read.cgi/tech/1158991211/577
578: デフォルトの名無しさん [sage] 2007/01/10(水) 21:25:23 >中にいれるオブジェクトが消える >代入演算子で上書きされたとき >オブジェクトが生きてるかどうか この辺が果てしなく意味不明。 >>577はshared_ptrを全く理解していないようだ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/578
579: デフォルトの名無しさん [sage] 2007/01/10(水) 21:55:07 ソース読めばわかるよ http://echo.5ch.net/test/read.cgi/tech/1158991211/579
580: デフォルトの名無しさん [sage] 2007/01/10(水) 21:57:28 >577 デストラクタ http://echo.5ch.net/test/read.cgi/tech/1158991211/580
581: デフォルトの名無しさん [] 2007/01/11(木) 07:38:26 shared_ptr<A> hoge(new A); int i = 1; while(i--){ shared_ptr<A> hogehoge(new A); hoge = hogehoge; cout << hoge.use_count() << endl; } cout << hoge.use_count() << endl; こういう状態のとき、二番目のhoge.use_count()のときにはカウントが 一番目より一つ減るでしょ。それをhogeのカウンタはどうやって把握したの? ってことを聞きたかったんです。 カウンタのデクリメントについては、ソースを読めば代入演算子の 部分で、代入元をインクリメントして代入先をデクリメントするってことが 書いてあるけど、代入したオブジェクトそのものが上のコードみたいに スコープはずれて消えたときにデクリメントする処理なんて書いてないな、 と思ったんです。 >>580 代入元のデストラクタですか? どうやって代入元のデストラクタで、shared_ptrのカウントを下げてるか分かりますか?? http://echo.5ch.net/test/read.cgi/tech/1158991211/581
582: デフォルトの名無しさん [sage] 2007/01/11(木) 08:09:28 >>581 カウンタもshared_ptrが保持するポインタと同じく共有されるよ。 shared_ptr<A> hogehoge(new A); //カウント1 hoge = hogehoge; //カウント2 } //hogehogeの破棄によってカウント1 その後hogeの破棄時にカウントが0になるのでdeleteが呼ばれる。 http://echo.5ch.net/test/read.cgi/tech/1158991211/582
583: デフォルトの名無しさん [] 2007/01/11(木) 09:19:43 初歩的な質問で申し訳ないけれど、 shared_ptrはコンストラクタではいろんなオブジェクトを受け付けるけど 代入はスマートポインタしか受け付けないってのは正しい? いちど初期化してしまうと、 あとから別のオブジェクトを入れるには他のshared_ptrにいれてから 本当に入れたいshared_ptrにそのshared_ptrを代入するしかありませんか? http://echo.5ch.net/test/read.cgi/tech/1158991211/583
584: デフォルトの名無しさん [sage] 2007/01/11(木) 09:41:04 >>581 もうね、 > int i = 1 > while(i--){ の時点でC++理解してなさすぎ。 { shared_ptr<A> hogehoge(new A); hoge = hogehoge; cout << hoge.use_count() << endl; } これだけでスコープ限定できるの。 boostを理解しようなんて百年早い。 基礎からやり直しな。 http://echo.5ch.net/test/read.cgi/tech/1158991211/584
585: デフォルトの名無しさん [sage] 2007/01/11(木) 09:55:44 C++っていうかC http://echo.5ch.net/test/read.cgi/tech/1158991211/585
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 416 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s