米国国防省の標準高等言語エイダ(Ada)を語れ!at TECH
米国国防省の標準高等言語エイダ(Ada)を語れ! - 暇つぶし2ch594:デフォルトの名無しさん
06/02/14 21:34:42 .net
>>580
a := b;としたらAdjust(a);が呼ばれる。
例えば中にポインタがあったりして、その中身まで複写しないと
いけないようなケースでコピー後の調整を行うのがAdjust。
全部コピーして回るC++のコピーコンストラクタとはちょと違う。

type a is new Controlled with record x : access Work_Area; y: Integer; end;
procedure initialize(obj:in out x) is begin obj.x := new Work_Area; end;
procedure Free is new Unchecked_Deallocate(...);
procedure finalize(obj:in out x) is begin Free(obj.x); end;
とすると必要なAdjustは
procedure adjust(obj:in out x) is begin obj.x := new Work_Area'(obj.x.all); end;

x,yとも値は勝手にコピーされるけど、xは中身まで複製しないとその後共有してしまうしFinalizeで二重解放になってしまう。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch