相关疑难解决方法(0)

为什么在访问对象之前我不应该使用"if Assigned()"?

这个问题是stackoverflow上人们特别评论的延续,我现在已经看过几次不同的时间了.我和教我Delphi的开发人员一样,为了保证安全,if assigned()在释放对象之前,以及在做其他各种事情之前总是先做检查.但是,我现在被告知我应该添加此支票.我想知道如果我这样做,应用程序编译/运行的方式是否存在任何差异,或者它是否会对结果产生影响...

if assigned(SomeObject) then SomeObject.Free;
Run Code Online (Sandbox Code Playgroud)

假设我有一个表单,我在表单创建时在后台创建一个位图对象,并在完成后释放它.现在我想我的问题是,当我试图访问可能在某些时候可能已经免费的对象时,我已经习惯了对我的很多代码进行检查.即使没有必要,我也一直在使用它.我喜欢彻底......

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FBitmap: TBitmap;
  public
    function LoadBitmap(const Filename: String): Bool;
    property Bitmap: TBitmap read FBitmap;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FBitmap:= TBitmap.Create;
  LoadBitmap('C:\Some Sample Bitmap.bmp');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if assigned(FBitmap) then begin //<-----
    //Do some routine to close file …
Run Code Online (Sandbox Code Playgroud)

delphi

57
推荐指数
3
解决办法
3万
查看次数

TStringList局部变量未初始化为nil - 为什么?

我正在使用此代码来检查是否TStringList创建:

procedure TForm1.Button1Click(Sender: TObject);
var

  sVariable : TStringList;
begin
   if not Assigned(sVariable) then
   sVariable:= TStringList.Create;
end; 
Run Code Online (Sandbox Code Playgroud)

但条件False总是如此,为什么会发生这种情况?如何检查TStringList对象是否已创建?

Ps我知道有一个类似的问题问题,我试过在那个问题上发布的解决方案,但它对我不起作用.

delphi tstringlist delphi-7

2
推荐指数
3
解决办法
4107
查看次数

标签 统计

delphi ×2

delphi-7 ×1

tstringlist ×1