【发布时间】:2016-08-23 20:19:46
【问题描述】:
情况
我要写一个类,构造函数是我自定义的,因为我需要初始化一些值。这是我目前写的代码:
type
TCombinatorio = class(TObject)
private
valN, valK: integer;
result: double;
public
property K: integer read valK;
property N: integer read valN;
constructor Create(valN: integer; valK: integer);
end;
constructor TCombinatorio.Create(valN: Integer; valK: Integer);
begin
inherited Create;
Self.valN := valN;
Self.valK := valK;
if ((valN < 0) or (valK < 0)) then
begin
raise Exception.Create('N and K must be >= 0');
end;
end;
由于我要进行一些数学计算,所以我需要避免使用负数。
问题
我可以这样在构造函数中引发异常吗?我是这样运行代码的:
procedure TForm1.Button1Click(Sender: TObject);
var a: TCombinatorio;
b: string;
begin
a := TCombinatorio.Create(5,-2);
try
//some code
finally
a.Free;
end;
end;
正如你在这里看到的,我的构造函数参数错误,因为第二个是负数。我也无法理解(根据我的构造函数的代码)是否真的需要 finally 中的a.Free,因为当构造函数引发异常时,会调用析构函数。
我想在 try-finally 块中包含 a := TCombinatorio.Create(5,-2); 以避免问题,但我不确定。你怎么看?
【问题讨论】:
标签: delphi