Ответ 1
В вашем коде, если TRegistry.Create
вызывает исключение, переменная Registry
не будет назначена. И, наконец, попытка будет пытаться получить доступ к неинициализированной переменной.
Правильный способ написания кода - убедиться, что переменная назначена перед входом в блок try/finally
.
Registry := TRegistry.Create;
try
//additional code to access and use the registry object could go here
finally
Registry.Free;
end;
Это самый фундаментальный шаблон управления жизненным циклом в кодировке Delphi, и вы должны глубоко посвятить его мышце.
Обратите внимание, что если конструктор выходит из строя, он будет убирать частично сконструированный объект перед распространением исключения. Новая ссылка на объект Registry
в этом коде назначается только в том случае, если конструктор успешно завершен.
Я хотел бы надеяться, что приведенные вами примеры были написаны в соответствии с моим кодом выше, и вы как-то неправильно их переписали. Если они написаны в соответствии с вопросом, то они явно ошибаются.