- C++相談室 part122 [無断転載禁止]©2ch.net
128 :デフォルトの名無しさん[sage]:2016/01/27(水) 12:30:07.60 ID:eULyfEEH - >>125
>それはそのクラスが内部で処理することであって ずっとその話なのだが
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
363 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:10:09.80 ID:eULyfEEH - GCのすべてを否定するつもりはないけど・・・
GCはメモリ管理を自動化する技術だけど、今のコンピュータはメインメモリを何十ギガ積んでたりするのも普通で メインメモリが足りなくなることはほぼ無くて、しかも仮想メモリもあるから、なおさらメモリは潤沢で・・・ むしろメインメモリ以外のリソースの方が余程貴重で、もし仮にメインメモリが足りなくなるまで GCを発動しないアホなGCが有ったとしたらメインメモリより先に他のリソースが枯渇する状況 だからメインメモリは無駄遣いしてもよいけど、他のリソースは使い終わったら こまめに開放しないとダメだから、いつ実行されるか分からないマークスイープ系GCの余計にRAIIな仕組みも必要なわけ しかしこのRAIIが付け焼刃でなまっちょろい出来だったりする C#で言えばDisposeが有るけど、C++のデストラクタのように特別扱いされておらず ただの普通の関数でしかないので、C++のデストラクタみたいに自身のメンバ変数について 自動で芋づる式に呼び出してくれない だから手動でメンバのDisposeを芋づる式に呼び出すコードを記述しなければならない いちいち自身のメンバ変数にIDisposableなものが有るか無いか調べるのもひと手間かかるし もしそうだったら自身もIDisposableにする必要があり、例の一連のイディオムを書かなければならない 当たり前にDisposeの呼び出し忘れが有ってもいけない まるで、mallocしたらfreeするのと似ている しかもIDisposableはコンポジションで増殖する IDisposableなオブジェクトをコンポジションしたら、自身もIDisposableといった具合 C#のようにコンパイラマジックでなんでも実現する言語で どうしてDisposeをC++のデストラクタみたいに特別扱いしなかったのか謎だ
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
364 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:24:38.54 ID:eULyfEEH - 謎だといったが、理由ははっきりしていて
メンバのDisposableを自動で呼び出す為には 他で使われてないことを保証する必要があって 参照カウンタ方式のようにローコストなものなら簡単に分かるが これでは循環参照の問題が出る プログラマが循環参照を気にしなくてもよいことが前提の マークスイープ系のGCを搭載した言語では設計思想が破たんするので 参照カウンタ方式は採用できないし マークスイープ系GCでは何処からも参照されていないことがローコストに分からないので 自動でDisposeを呼び出す仕組みを用意できない どうにもならない 結局C++の方式が一番優れている 循環参照が発生する場合はweak_ptrを使う事だけ注意を払えば GCにまつわる他の問題が一切発生しない
|
- GCは失敗。メモリは自分で管理せよ! その2©2ch.net
365 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:46:52.79 ID:eULyfEEH - もっと言えばC#でDisposeを実装する場合でも↑は問題になる
自身のメンバのDisposeを呼んでよいのかどうなのか 完全に自分しか使ってないことが分かっているのであればDisposeを呼び出して問題ないが あちこちから参照されている可能性があるメンバなら勝手にDisposeを呼び出してはいけない GC任せにするか、自分で参照カウンタを実装するか どちらにせよ、RAIIと相性が悪い
|
- HSP総合スレ【part 9】 [無断転載禁止]©2ch.net
112 :デフォルトの名無しさん[sage]:2016/01/27(水) 22:53:30.43 ID:eULyfEEH - コンテストのツール系の入賞作品に大概書かれている「実用性がある」云々
これじゃまるでHSPでツールを作ると、普通では実用性が有るものが作れないみたいじゃないかwww
|
- 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
345 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:06:55.48 ID:eULyfEEH - Cより覚えることが少なくてシンプルで他の言語の基礎になっていて
学んだことの応用が効いて実用性のある言語が他にあるか? 初心者が学ぶのに妥当だと思うが
|
- C#, C♯, C#相談室 Part89 [転載禁止]©2ch.net
923 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:08:26.64 ID:eULyfEEH - ベクトル モートル ビール
|
- C++相談室 part122 [無断転載禁止]©2ch.net
189 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:20:30.30 ID:eULyfEEH - >>187
言っていることがよくわからないね shared_ptrのコストが気になるならnewせずに スタック上に確保するなりなんなりすればよいだけだろうに そっちの方が正統派のRAIIだというのに何を言っているのだろうか まったくお門違い むしろスタック上にオブジェクトを確保できる言語の方が珍しくて C++ではそれができるだけでも有り難いというのに
|
- 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
352 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:50:57.65 ID:eULyfEEH - 実際問題JAVAとかC#は最初に教えるにしては覚えることが膨大すぎると思うよ
ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう C++なんかもってのほかだしさ >CPUを覚えるのと大差無いから基本であるが難しい CPUに詳しくなって悪いことは無いよね、どんな言語にも応用が利くし Cはいろんな言語のベースになっているからCを覚えると他の言語に展開しやすい 言語仕様も必要最小限でかつ、ぎりぎり実用可能なレベルで玩具というわけでもない これがRubyとかなら、matzの実装について詳しくなる必要があるわけだが こんなものを学んだところで有り難くない
|