[過去ログ]
ゲームプログラミング相談室 (986レス)
ゲームプログラミング相談室 http://game.5ch.net/test/read.cgi/gamedev/1005040025/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
852: 名前は開発中のものです。 [sage] 02/10/29 20:44 ID:??? >>841 > 解放したポインタにNULL代入するのは作法でしょう。 気休めに過ぎない作法なんか、やめとけよ……。 だいたい複数のポインタが同一の領域を指している環境では、そんな手は 使えないし。 > どうしてもめんどうなら その程度の「手間」で済むのは free_something() なんてオモチャみたいな コードだから。現実に面倒なデータ構造を操作するコードだと、そんな単純 にはいかんよ。 特にデータ構造が複雑な場合には、そのデータを辿るのがクリティカルパス になるケースが多い(逆にクリティカルじゃなければ、そんな頑張って面倒 なデータ構造をメンテナンスなんかしないで、単純配列を全部検索、とかで 済ませられる)。 そこで「すべての要素に pointer の pointer を持たせて、二回 dereference しましょう」ってのはかなり厳しいよ。 > というか、そういうところで面倒くさがる人はC++を使うべきでは。 全部 boost::shared_ptr にするとか? それは性能上の問題に加えて、解放の タイミングを計るのが難しくなる(解放したつもりが、余計なところで shared_ptr が一つ生きてた、とか)という問題がある。 もちろん「ここで最後の筈」ってことで assert() 入れてチェックすることはでき るんだが、assert() に引っかかったときに じゃあ、いったいどこで参照が残ってるんだ? っつーのは、やっぱり探すのが大変だよ。 http://game.5ch.net/test/read.cgi/gamedev/1005040025/852
853: 名前は開発中のものです。 [sage] 02/10/30 00:06 ID:??? >>852 >そこで「すべての要素に pointer の pointer を持たせて、二回 dereference >しましょう」ってのはかなり厳しいよ。 PalmOSの開発環境では、ヒープメモリを確保するときにポインタのポインタしかくれない (OS側でガベコレするため)のだけど、それでもなんとかなっているのは興味深い。 ポインタのポインタで生きていくための知恵が、Palm界では蓄積されてるのかもね。 http://game.5ch.net/test/read.cgi/gamedev/1005040025/853
855: 名前は開発中のものです。 [sage] 02/10/30 00:33 ID:??? >852 俺の場合、free後NULL代入してないだけで怒られたもんだが……。 二重ポインタっても、C言語に参照がないから代用してるだけだ。 参照で実装してもいいかもね。値渡しでfreeする関数に渡した つもりのfree後のポインタが実は参照渡しで暗黙でNULLに 書き換わっていたとして、なんら問題あるまい? むしろ、解放後のポインタにアクセスするという潜在的バグをつぶせる。 http://game.5ch.net/test/read.cgi/gamedev/1005040025/855
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s