Moin Spider,
es ist zwar richtig, dass "versucht" werden soll, den Code zwischen try/finally auszuführen, und im Fehlerfalle auf jeden Fall das was im finally Block steht ausgeführt werden soll, und es ist auch unwahrscheinlich, dass beim ReadString aus einer INI so ein Abbruch auftritt, abers:
Wie leicht kann man, ohne drüber nachzudenken, zwischen Create und Free noch etwas einfügen, das einen Fehler verursachen kann, ohne das man dann auch den try/finally Block nachträgt.
Es ist einfach sauberer grundsätzlich immer die Freigabe von Resourcen sicherzustellen, soweit man das absichern kann, zumal man dann auch nicht jedesmal überlegen muss, ob die Anweisungen zwischen try/finally "gefährlich" sind oder nicht. TRegistry.ReadString kann, im Gegensatz zu TIniFile.ReadString, eine
Exception verursachen.
BTW:
Was mir gerade noch auffällt:
Wenn die Verwendung einer Variablen innerhalb einer Prozedur/Funktion/Methode abgeschlossen ist, wie in Deinem Beispiel "ini", sollte man die auch lokal deklarieren.