Да, это сохранить. Ваш код
function Example.Foo: Integer;
var
lock : ILock;
begin
lock := ScopedLock<TCriticalSection>.Create(mySync);
// ...
end;
компилируется как следующий псевдокод
function Example.Foo: Integer;
var
lock : ILock;
begin
lock := ScopedLock<TCriticalSection>.Create(mySync);
lock._AddRef; // ref count = 1
try
// ..
finally
lock._Release; // ref count = 0, free lock object
end;
Вы можете видеть, что когда lock var выходит из области видимости, его количество ссылок уменьшается, становится равным нулю, и объект блокировки автоматически уничтожается.