一些困了好久的object pascal問題(100分)

  • 主题发起人 主题发起人 kouchun
  • 开始时间 开始时间
K

kouchun

Unregistered / Unconfirmed
GUEST, unregistred user!
1.) 想做一個function 如
function abc:tstringlist
begin
result:=tstringlist.create
.....
result.free:
end;
function中的resul要create和free嗎?如何反回值

2.)為什麼有些變量付值後可以直接對控制原變量....如
var tbltemp:ttable;
begin
tbltemp:=tblData;
tbltemp.next;
end;
為什麼我用tbltemp可以控制datasource中的記錄(原datasource的datasel指向tbldata)?
var sstr,temp:string;
begin
sstr:='123456'
temp:=sstr;
temp:='abcd';
end;
這時為什麼temp不會改變sstr的值....calss和變量的付值有什麼不同??
 
喝喝:
1.) 想做一個function 如
function abc:tstringlist
begin
result:=tstringlist.create
.....
//result.free:
//不需要也不能Free,如果free了就不能返回了,不过你在使用了这个函数所返回的StringList需要Free.
end;
function中的resul要create和free嗎?如何反回值
比如:
Var ST:TStringList;
begin
ST:=abc;
Showmessage(IntToStr(ST.Count));
ST.Free;
//这里就是Free在abc函数中创建的Stringlist.
end;


2.)為什麼有些變量付值後可以直接對控制原變量....如
var tbltemp:ttable;
begin
tbltemp:=tblData;
tbltemp.next;
end;
為什麼我用tbltemp可以控制datasource中的記錄(原datasource的datasel指向tbldata)?
var sstr,temp:string;
begin
sstr:='123456'
temp:=sstr;
temp:='abcd';
end;
這時為什麼temp不會改變sstr的值....calss和變量的付值有什麼不同??
你应该了解一些关于指针的概念,在Delphi中Class的实例就是一种指针,如果你直接对类实例赋值,
仅仅是把这个实例变量指向和原始变量的同一地址空间,所以当你改变新变量的一些操作时会改变原始变量,
而普通变量不一样,它们在赋值的时候是把数据Copy成两份,当你改变新变量的时候,
已经与原变量没有关系了,所以不会影响到原变量!
 
result最后付值就可以了啊,中间声明一个变量就ok了。
 
aizb已经讲的很清楚了。
 
function abc:tstringlist
begin
result:=tstringlist.create
.....
//result.free:
//不需要也不能Free,如果free了就不能返回了,不过你在使用了这个函数所返回的StringList需要Free.
end;
不要free,那麼function abc的資源是否會自動式放......??
如果我用 listbox.items.assign(abc)
這樣abc的資源是否會自動式放??

var tbltemp:ttable;
begin
tbltemp:=ttable.create;
tbltemp:=tblData;
tbltemp.next;
tbltemp.free;
end;
如果改成這樣又如何呢??
 
返回指针就可以
 
function abc:tstringlist
begin
result:=tstringlist.create
.....
result.free:
end;
象这样的函数很少,整个vcl类库都很难找到一个这样返回值的函数

一般都是这样的 procedure foo(List:TStirngList);将创建好的TStringList指针传给list就行了
最后别忘了free
 
你要是c程序员很好理解这些东东.
说到底就是指针的概念与理解
 
多人接受答案了。
 
后退
顶部