請問一些觀念問題 |
答題得分者是:Coffee
|
inglong
初階會員 發表:28 回覆:27 積分:36 註冊:2004-08-13 發送簡訊給我 |
大家好 如果我宣告 一個 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 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
<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>
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |