- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
47 :デフォルトの名無しさん[sage]:2015/11/24(火) 00:26:10.23 ID:f4S6RtN7 - うーん質問がアバウトすぎたな。もう少し具体的に書くわ
例えば2chのある板を管理するプログラムを書くとして BoardクラスとThreadクラスを想像してみてくれ BoardはThreadオブジェクトを管理するが、Threadは 産まれたり死んだりと揮発的で寿命が定まらないと。 で各Threadは何らかの共有リソースを持つと。 例えば一度読み込んだ画像を各スレッドで共有したいとかが 考えられるけど、画像オブジェクトをshared_ptrで共有するのは 適切ではない なぜならある瞬間に産まれたThread群がひとつの画像を共有する からといってshared_ptrで持たせたとしても、後の更新時に 更にその画像を共有したいThreadが現れたときに、画像が すでにあることを何らかの形で知れないといけないから。 結局Boardなんかが画像オブジェクトのコンテナを持つ必要が あってそのコンテナへの追加と削除のために別の共有の 仕組みが必要になるんだよ。例えばThreadがBoardに画像を リクエストして参照カウンタを持ったアクセサを返すようなもの だから所有権はBoardひとりが持てばよくてshared_ptrを 使う必要がなくなるという理屈 こういったケースを踏まえてもshared_ptr使うケースって ほとんどなくね
|
- 【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 17 [転載禁止]©2ch.net
309 :デフォルトの名無しさん[sage]:2015/11/24(火) 01:16:13.05 ID:f4S6RtN7 - 猿CM繋がりで「参加せざるをえない」をかけてるんじゃないか?
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
50 :デフォルトの名無しさん[sage]:2015/11/24(火) 05:26:33.27 ID:f4S6RtN7 - >>49
いやいくらでも書いてるけど基本一緒 というか上の例もそのままマルチスレッドに適用できる話でしょ 例えばproducer consumerならproducerが所有権を持つし thread per messageなら共有データはホストが持って固有データは 個別スレッドで持つだけ むしろマルチスレッドの場合、所有者をより厳格に決めとかないと 泣く事になるぞ
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
54 :デフォルトの名無しさん[sage]:2015/11/24(火) 16:23:15.08 ID:f4S6RtN7 - >>51
今のC++からshared_ptrをそのまま無くせって言ってるんじゃないぞ shared_ptrのコピーを禁止にしてweak_ptrの対応だけあれば良くないかって事 そもそも何でそんなこと言うかっていうと、 GCない言語→循環参照ガー。みたいによく言われるけど使わないで 済むなら静的解析で循環参照の起こり得るケースをエラーにしてしまう って解決方法もあるかなと思っただけ あとshared_ptrとweak_ptrはアトミック操作とメモリバリアを必要としうるから それに頼った設計は疑問を感じる
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
55 :デフォルトの名無しさん[sage]:2015/11/24(火) 16:37:54.42 ID:f4S6RtN7 - 一応言っとくと静的解析のくだりは新しい言語を
設計するとした場合の話ね C++だとほぼ不可能だろうから
|