Nur was kleines: die beiden if Assigned() kannst du im finally Teil entfernen und direkt .Free aufrufen. Falls einer der beiden Constructoren fehlschlägt, gibt es eine
Exception und die wäre ausserhalb des Try/Finally und würde von daher nie mit einer uninitialisierten Variable dort aufschlagen. Und wenn (was so hier nicht vorkommen kann) die Instanzen nil wären, dann würde Free das entsprechend handeln - dafür ist es ja da.