Entweder beide Klassen verwenden eine eigene Instanz von TStringlist, dann musst Du sie Assign zuweisen. Oder eine Klasse legt die Instanz an und die andere erhält nur die Referenz darauf, dann musst Du zuweisen. Im Moment mischst Du beides, das geht nicht gut.
Zitat:
FsLPfade := FDatenbankDatei.Dateipfad; //wenn ich das richtig gesehen habe, sind das eigentlich 2 Instanzen
[edit] Nochmal 2 Beispiele zur Verdeutlichung:
Delphi-Quellcode:
type
TTest = class
strict private
FList: TStrings;
public
constructor Create;
destructor Destroy; override;
property List: TStrings read FList write FList;
end;
{ TTest }
constructor TTest.Create;
begin
inherited;
FList := TStringlist.Create;
end;
destructor TTest.Destroy;
begin
FList.Free;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var Test1, Test2: TTest;
begin
Test1 := TTest.Create;
try
Test2 := TTest.Create;
try
//die folgende Zeile verursacht Fehler:
Test1.List := Test2.List;
//diese aber nicht (alternativ zur obigen):
Test1.List.Assign(Test2.List);
finally
Test2.Free;
end;
finally
Test1.Free;
end;
end;
Beide Objekte enthalten eine eigene TStrings-Instanz, daher muss mit Assign zugewiesen werden. Anders wäre es so (2 unterschiedliche Klassen):
Delphi-Quellcode:
type
TTest = class
strict private
FList: TStrings;
public
constructor Create;
destructor Destroy; override;
property List: TStrings read FList write FList;
end;
TBla = class
strict private
FList: TStrings;
public
property List: TStrings read FList write FList;
end;
{ TTest }
constructor TTest.Create;
begin
inherited;
FList := TStringlist.Create;
end;
destructor TTest.Destroy;
begin
FList.Free;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var Test1: TTest;
Bla: TBla;
begin
Test1 := TTest.Create;
try
Bla := TBla.Create;
try
//Bla hat keine eigene Instanz erstellt, Zuweisung ist in Ordnung
Bla.List := Test1.List;
//dafür kracht es dann so:
Bla.List.Free;
//es sei denn, man gibt Bescheid:
Bla.List := nil;
Test1.List := Bla.List;
finally
Bla.Free;
end;
finally
Test1.Free;
end;
end;
So wie im 2. Beispiel sollte man das aber lieber nicht machen. Das Objekt, das eine Instanz anlegt, sollte auch für die Freigabe zuständig sein, sonst verliert man schnell den Überblick, was zu Speicherlecks und Zugriffsfehlern führt. [/edit]