[過去ログ] GCは失敗。メモリは自分で管理せよ! その2©2ch.net (720レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
67: デフォルトの名無しさん [sage] 2015/11/28(土) 13:55:47.33 ID:pohBt4lh(1/4) AAS
null代入なんていちいち書いていたら
コードが冗長になって保守性が落ちる。
メモリ食いのオブジェクトなど、クリティカルな部分でのみ使うべき
80: デフォルトの名無しさん [sage] 2015/11/28(土) 20:10:37.33 ID:ekTV2Qou(3/3) AAS
>>77長い関数中にそれ出てきたら変数を使い回す前に初期化したいのかな?とかも考えるな
短い関数なら変数を使い終わったとか重要な情報じゃないから無駄な行入れて可読性下げてるだけ
118: デフォルトの名無しさん [sage] 2015/11/30(月) 20:33:04.33 ID:V9s4KAVu(1) AAS
人生の管理ができない奴が、メモリを管理できるとは到底思えない
348: デフォルトの名無しさん [sage] 2015/12/21(月) 12:31:40.33 ID:ejqZ3DMD(18/26) AAS
外部リンク:ja.wikipedia.org
433: デフォルトの名無しさん [sage] 2016/03/27(日) 17:17:01.33 ID:MdJCnp0Y(5/6) AAS
>>428428(1): デフォルトの名無しさん [sage] 2016/03/27(日) 16:21:42.54 ID:vj+h39OC(6/10) AAS
>>423
そんな基本的なことを言って何がしたいの?
RAIIとGCは密接な関係が有るんだよ
君はローカル変数が好きみたいだから、ローカル変数の事例で説明するとする
(嫌ならC#のusingと読み替えてもらっても構わない)
ローカルに確保したオブジェクトが、メンバ変数に他のオブジェクトを持っていたとする
いわゆるコンポジションの状態、よくある話
C++で言えば、class my_class{ object *obj; }; といった感じのクラスになる、分かるよね?
で、ローカル変数はスコープを抜けたら解放される、usingも似たようなもの、これはRAIIの基本、良いね?
このとき、マークスイープ系GCだと、my_classのobjに他からの参照が有るかどうか、即座にわからないので
objを開放してよいのか判断が付かない→my_classは破棄されてもobjはGC発動まで保留される→objは残るのでRAIIの意味がない
もしくは、my_classのobjに他からの参照が全く無いことをプログラマが保証して
my_classの開放部にobjをdeleteなりdisposeなりするコードを記入する
しかしこれは、objの所有権がはっきりしていないことには使えない上に、「手動」である
C++の場合はスマポが有るのでまだましだが、C#のDisposeは完全に手動で呼ばなければならない
自身のメンバにIDisposableなメンバいたら、自身もIDisposableにしなければならず、Disposeメソッドを実装して
自身のメンバのDisposeを芋づる式に呼び出すコードを手動で書かなければならない
mallocしたらfreeしましょうと一緒で、C言語レベルの全くの手動になってしまう
参照カウンタ方式のGCではこれらの問題は発生しない
他からの参照が有るか無いかは即座にわかるし、参照カウンタが0になれば、その場で即座に破棄される
自身のメンバに対して、デストラクタは芋づる式に呼び出されるので、C#のDispose実装のような面倒さは無い
>>424
お前言ってること無茶苦茶すぎるだろ
>リソースのスコープは明示的でなければならない、デストラクタにもGCにも任せられない
GCはともかく、デストラクタでもダメって意味不明すぎるんだが
考えの根本がおかしい
バカすぎる
細かい事気にせずデストラクタで解放すりゃそれでおkって感じの適当な現場でしか働いた事無いんだろうな
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s