我有一个类
type
TLoadOption = class
private
FAutoSearch: Boolean;
public
property AutoSearch: Boolean read FAutoSearch write FAutoSearch;
end;
在其中一个函数中,我正在堆栈中创建该类的对象。
procedure MyView.InitializeForm(const aMsg: MyMsg);
//---------------------------------------------------------------------------
var
Options: TLoadOption;
begin
if aMsg.OptionalObject <> nil then
Options := aMsg.OptionalObject as TLoadOption;
if Assigned(Options) and Options.AutoSearch then
DoRefresh;
end;
我在aMsg中没有传递任何内容,理想情况下Options不会被设置。
在Delphi XE中,默认情况下Options设置为nil,所以不会调用DoRefresh函数。但是当我在Delphi XE4中执行相同的代码时,options被初始化为一些随机值,并且AutoSearch始终为true,导致调用了此函数DoRefresh,这是不希望发生的结果。
我想知道是否有任何编译器选项可以将默认值设置为未初始化变量。目前我的唯一解决方案如下:
procedure MyView.InitializeForm(const aMsg: MyMsg);
//---------------------------------------------------------------------------
var
Options: TLoadOption;
begin
Options := nil;
if aMsg.OptionalObject <> nil then
Options := aMsg.OptionalObject as TLoadOption;
if Assigned(Options) and Options.AutoSearch then
DoRefresh;
end;
这是一种正确的方法吗?
Options
未初始化。永远不要忽略编译器的警告。 - Rob Kennedy