Das ist zwar immer ratsam, aber hier optional, da nur der leere Konstruktor von TObject aufgerufen würde.
Das Problem ist, dass du nach dem Einfügen in die Liste das Objekt sofort wieder freigibst:
Delphi-Quellcode:
var
obj : Tm3u
begin
obj := Tm3u.Create;
obj.dir := 'blabla';
obj.list.assign(irgendsoneliste);
m3ulist.add(obj);
obj.destroy; // <- btw: Sowieso besser .Free;
end;
Du übergibst der Liste ja nur eine Refrenz auf das Objekt und nicht eine Kopie, also enthält die Liste nur noch "Müll". Wenn die Liste mit AOwnsObjects = true erstellt wurde, werden alle Items mit der Liste freigegeben. Wichtig ist hier aber, dass du den Destruktor
überschreibst, sonst wird deine Stringlist nie freigegeben!