- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ]
- プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/
- 894 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:15:54 ]
- テキトーなクラスつくってデストラクタにwritelnでも入れとけば確認できるんじゃないでしょうか。
- 895 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:19:45 ]
- ていうかよく見たら参照元がdeleteされたあとさらにdeleteしてるんすか。
これはやっちゃだめでしょう。
- 896 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 04:25:33 ]
- 気になって眠れないので調べたら、
「ポインタ、動的配列、参照変数は、 delete のあと null にセットされます。」 と言う一文が。 しかしこの場合nullがセットされるのは参照変数としてのA自体で、 Aの実体を参照してた参照変数のBはそのまんま(つまりゴミ参照してる)じゃないでしょうか。 なのでやっぱり複数の参照変数で参照されてる大元消したあとにdeleteするのはまずいかも。
- 897 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 09:24:20 ]
- >>893
www.kmonos.net/alang/d/expression.html#DeleteExpression > それ以外の場合はガベージコレクタが呼び出され、 > インスタンスに割り当てたメモリは直ちに解放されます。 とあるから、 delete A; でBが無効な参照になるのは確実だと思う。 ただ、解放済み(だけどもともとGCで確保した)領域への参照に対する deleteについては仕様に言及がないと思うので、これは実装依存だと思う。 (つまり、実装によっては未定義動作となる可能性もあるということ) 実装依存となると、実装がどうなってるか分からない(今回の場合)なら やっちゃ駄目な操作(選択肢の1)になるかな。
|

|