如何判断类是否已经初始化以及如何释放类(100分)

  • 主题发起人 主题发起人 lszhangDream
  • 开始时间 开始时间
L

lszhangDream

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TMyNewClass=class
private
i:Integer;
end;
比如我自己定义一个类,请问我如何判断类是否已经初始化?我这样写代码
var
NewClass:TMyNewClass;
begin
if(NewClass=Nil) then NewClass:=TMyNewClass.Create();
if not (NewClass=Nil) then NewClass.Free();
end;
好像初始化和释放都有问题,可是我不知道具体原因。请各位大虾指点一二。
 
在delphi里定义类,一般来说总是从某个基类继承的。对于组件来说它的根类是TObject。这样最基础的构建和释放,系统帮你完成了。
你这样定义的类,构建和释放都成问题的。具体怎么解决我也不知道:(,关注
 
我的例子

constructor TPromoSearch.Create(ADOLink: TADOConnection;aOwer:TComponent;
ProductCheckTree: TRzCheckTree);
begin
inherited Create(aOwer);
DM := TDm.Create(nil)
//数据库对象窗口
FADOConnection:=ADOLink;
FQuery:=TADOQuery.Create(self);
FQuery.Connection:=FADOConnection;
FProductCheckTree:=ProductCheckTree;
FPage:=1;
end;

destructor TPromoSearch.Destroy;
begin
if assigned(FQuery) then
FQuery.Free;
inherited;
end;

if not assigned(Search) then
Search:=TPromoSearch.Create(DM.conn,self,ProductTree);
Search.ProductSearch(cbxKey.Text,cbxNumber.Text,edtLowerPrice.Text,
edtHighPrice.Text);
 
var
NewClass:TMyNewClass;
begin
if not Assigned(NewClass) then NewClass:=TMyNewClass.Create();
if Assigned(NewClass) then FreeAndNil(NewClass) ;
end;
 
楼上的代码好像也有问题。因为NewClass没有初始化,不为空。所以 if not Assigned(NewClass) then NewClass:=TMyNewClass.Create();这句不能执行。我不知道DELPHI中怎样对变量初始化?DELPHI中怎样实现C++如下语句 TMyNewClass* NewClass=NULL;?
 
var
NewClass:TMyNewClass;
begin
NewClass:=nil;
if not Assigned(NewClass) then NewClass:=TMyNewClass.Create();
if Assigned(NewClass) then FreeAndNil(NewClass) ;
end;
 
var
NewClass:TMyNewClass;
begin
if not Assigned(NewClass) then NewClass:=TMyNewClass.Create();
if Assigned(NewClass) then FreeAndNil(NewClass) ;
end;
这种方法我在N本书里看到.应该是没问题的.
TMyNewClass* NewClass=NULL;?
不懂C++[:D]
在好几本书里都提到过 delphi 和 C++ 对类的构造的方式是不同的
在delphi 中,好象类变量被申明后就被符了NIl(做了几次实验).
对与动态生成的对象如
var
NewClass:TMyNewClass;
begin
if(NewClass=Nil) then NewClass:=TMyNewClass.Create();
if not (NewClass=Nil) then NewClass.Free();
end;
这里主要问题是在 NewClass.Free()
你释放了对象的内存空间,却没有把对象变量赋
空,这样在下次建立对象时就不会执行NewClass:=TMyNewClass.Create();

 
我真佩服你们,牛B的大虾们。
 
更正:
if not Assigned(NewClass) then NewClass:=TMyNewClass.Create();
if Assigned(NewClass) then FreeAndNil(NewClass) ;
应该是
if not Assigned(NewClass) then NewClass:=TMyNewClass.Create()
else FreeAndNil(NewClass) ;



 
后退
顶部