СИТУАЦИЯ
Я собираюсь написать класс, а конструктор - мой, который я сделал, потому что мне нужно инициализировать некоторые значения. Это код, который я написал до сих пор:
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;
Как вы можете видеть здесь, у меня неправильные параметры для моего конструктора, так как второй является отрицательным. Я также не могу понять (согласно коду моего конструктора), действительно ли необходим a.Free
внутри finally, потому что когда конструктор вызывает исключение, вызывается деструктор.
Я подумал включить a := TCombinatorio.Create(5,-2);
внутри блока try-finally, чтобы избежать проблемы, но я не уверен. Как вы думаете?