喫茶XRAYトップページ

[スレッド全体
]

[9927] 今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/15 (日) 19:47:35 taki
マスター 教えてください。
動的配列を使う度に、以下の記事が気になって心配になります。

------------------------------------------
Delphi/動的配列の罠
http://tobysoft.net/wiki/index.php?Delphi%2F%C6%B0%C5%AA%C7%DB%CE%F3%A4%CE%E6%AB

動的配列を「string のようなものだ」と思っていると痛い目に合います。
動的配列は参照カウンタつきポインタ

「代入したときは参照カウンタをインクリメント」してくれ、
「スコープが外れたときは、参照カウンタをデクリメントし、
  0になったら自動的に開放」はしますが、
「書き換えた時にコピー(copy on write)」はしてくれないのです。
------------------------------------------

説明はヘルプの「動的配列」のところに書いてあるそうなのですが、
Delphi XP4 Starter のHELPでキーワードに動的配列を入力しても説明が
見つかりません。

記事の説明のコードを見ると、単純に := で代入をするとポインタが
コピーされるので、「代入元と代入先が同じメモリーを参照します」と
読めるのですが、他に何か罠があるのでしょうか?

言葉で分からないのは「参照カウンタつきXX」の部分です。


[9928] Re:今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/15 (日) 21:51:04 taki
> 言葉で分からないのは「参照カウンタつきXX」の部分です。

作成した手続きや関数内で定義した変数(ローカル変数)のスコープは
その手続きや関数内だけで有効ですよね。
その手続きや関数から抜け出した時点で変数は解放されるますよね。
ローカル変数には参照カウンタはないのでしょうか。

それじゃ、グローバル変数になると参照カウンタが必要になるのでしょうか?
複数の手続きがグローバル変数を参照する場合、複数の手続きの数だけインクリメント
され、それぞれの手続きから抜けるとデクリメントされると思えば良いのでしょうか?
そうなると、1個目の手続きでグローバル変数を使い、その手続きが終わったとたんに
変数が解放されてしまうことになるように思えるのですが。

Saraさん、タイトルをマネしてすみません。m(_ _)m


[9943] 著作権侵害?返信 削除
2016/5/16 (月) 18:32:50 Mr.XRAY
> Saraさん、タイトルをマネしてすみません。m(_ _)m

一般に,ネット上での書き込みは,書いた方に著作権があります.
許可をもらっていない場合は...
裁判で受けて立ちますか.証人として出廷してもいいですよ.
ワハハハッ.


[9944] Re:著作権侵害?返信 削除
2016/5/16 (月) 18:55:10 Mr.XRAY
> 裁判で受けて立ちますか.証人として出廷してもいいですよ.
> ワハハハッ.


証人の私
『だいたい,taki さんというのは何でも真似るんです.
猿真似ですね』

別の証人
『そもそもプログラムというのは,猿真似から始まるんです.
ですから,猿真似は当然なんです』

という展開になるのかも...


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82