線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2538
推到 Plurk!
推到 Facebook!

請問一些觀念問題

答題得分者是:Coffee
inglong
初階會員


發表:28
回覆:27
積分:36
註冊:2004-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-03 09:10:51 IP:220.132.xxx.xxx 訂閱

大家好
如果我宣告 一個 Record 或 Class 或 Object
這三者有哪些地方不一樣 例如記憶體佔用的方式和大小
以及用動態陣列宣告以上三者 和直接宣告固定大小的陣列 有哪些不同
最後還有釋放的方式是否不相同 或是一樣
希望各位不吝賜教
以下是舉例:

Type

TTest=Record
X,Y,Z:integer;
end;

TTest2=Class
X,Y,Z:integer;
end;

TTest3=object;
X,Y,Z:integer;
end;

var
Test : array of TTest;
TestA:array[0..10] of TTest;

Test1:Array of TTest1;
Test1A:array[0..10] of TTest1;

Test2:Array of TTest2;
Test2A:array[0..10] of TTest2;



------
何需Coding爭峰
千人指 萬人鋒
敢問Coding頂峰
三尺秋水塵不染
天下無雙
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-03 10:26:54 IP:220.130.xxx.xxx 訂閱
何不看書?
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-03 21:58:03 IP:211.76.xxx.xxx 訂閱
 <textarea class="delphi" rows="10" cols="60" name="code"> unit TestMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTest = Record X, Y, Z: Integer; end; TTest2 = class//等於 TTest2 = class(TObject) public X, Y, Z:integer; end; TTest3 = class(TObject)//同TTest2, 原寫法 TTest3=object; 有誤 public X, Y, Z:integer; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var I: Integer; V: array of TTest; //指向型態為TTest的動態陣列 A: array[0..10] of TTest; //長度為10的TTest資料陣列 begin ShowMessage('Size of TTest = ' IntToStr(SizeOf(TTest))); ShowMessage('Size of V = ' IntToStr(SizeOf(V))); ShowMessage('Size of A = ' IntToStr(SizeOf(A))); //使用 V SetLength(V, 10);//配置記憶體 try ShowMessage('Length of V = ' IntToStr(Length(V))); for I := 0 to Length(V)-1 do begin V[I].X := Random(MaxInt); V[I].Y := Random(MaxInt); V[I].Z := Random(MaxInt); end; finally SetLength(V, 0);//or V := nil; end; //使用 A // for I := 0 to Length(A)-1 do ShowMessage('Size of A = ' IntToStr(SizeOf(A))); for I := Low(A) to High(A) do begin A[I].X := Random(MaxInt); A[I].Y := Random(MaxInt); A[I].Z := Random(MaxInt); end; end; procedure TForm1.Button2Click(Sender: TObject); var I: Integer; V: array of TTest2; A: array[0..10] of TTest2; begin ShowMessage('Size of TTest2 = ' IntToStr(SizeOf(TTest2))); ShowMessage('InstanceSize of TTest2 = ' IntToStr(TTest2.InstanceSize)); ShowMessage('Size of V = ' IntToStr(SizeOf(V)));//不定長度的物件指標 ShowMessage('Size of A = ' IntToStr(SizeOf(A)));//11個TTest2物件指標 //使用 V SetLength(V, 10);//配置記憶體,10個物件指標 try ShowMessage('Length of V = ' IntToStr(Length(V))); for I := 0 to Length(V)-1 do begin V[I] := TTest2.Create;//配置記憶體並產生物件,將位址傳回給V[I] V[I].X := Random(MaxInt); V[I].Y := Random(MaxInt); V[I].Z := Random(MaxInt); end; finally for I := 0 to Length(V)-1 do FreeAndNil(V[I]);//肆放記憶體,並將物件指標V[I]設成nil SetLength(V, 0);//or V := nil; end; //使用 A // for I := 0 to Length(A)-1 do ShowMessage('Size of A = ' IntToStr(SizeOf(A))); for I := Low(A) to High(A) do begin A[I] := TTest2.Create;//配置記憶體並產生物件,將位址傳回給V[I] A[I].X := Random(MaxInt); A[I].Y := Random(MaxInt); A[I].Z := Random(MaxInt); end; for I := Low(A) to High(A) do FreeAndNil(A[I]); end; end. </textarea>
編輯記錄
jow 重新編輯於 2007-09-03 21:59:34, 註解 無‧
jow 重新編輯於 2007-09-03 22:01:31, 註解 縮排有誤,好像沒有Work.‧
系統時間:2017-12-15 6:38:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!