米国国防省の標準高等言語エイダ(Ada)を語れ!

■ このスレッドは過去ログ倉庫に格納されています
1名無しさんは伊達じゃない
垢版 |
NGNG
どうよ?
2006/02/14(火) 20:35:12
>>580
oopweb.com
ttp://oopweb.com/Ada/Documents/AdaLinux/VolumeFrames.html?/Ada/Documents/AdaLinux/Volume/book.html
とかどうだ。
コピーコンストラクタのようなものと書かれてはいるが
2006/02/14(火) 21:34:42
>>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で二重解放になってしまう。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況