Я выучил что такое классы, но не осилил интерфейсы. Расскажите пожалуйста понятно, что это такое.
Я одно время думал, что интерфейс – это такой абстрактный класс, который поддерживает множественное наследование, поэтому его можно добавить к реальному (не абстрактному) классу при наследовании, соответственно расширив набор функций этого класса. А переменные в интерфейсе есть?
Вот пример использования интерфейсов для реализации умных указателей, который мне подсказали. Исходный код:
var
s: TStrings;
begin
s := TStringList.Create;
try
DoSomething(s);
finally
s.Free;
end;
end;
С помощью интерфейсов этот код можно заменить на такой:
var
s: IShared<TStrings>;
begin
s := Shared<TStringList>.New;
DoSomething(s);
end;
var
s: Shared<TStrings>;
begin
s := TStringList.Create;
DoSomething(s);
end;
Я не понимаю суть этого кода. Например где хранится счётчик, сколько элементов s было создано? И в каких участках кода проверяется, не пора ли удалить неиспользуемые элементы?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.