ich bin ganz neu hier im Forum und auch ganz neu in Lazarus & Pascal. Ich habe jetzt 5 Jahre lang beruflich in C++ Server und Frontends entwickelt und habe nun den Auftrag mich mal bei Lazarus umzusehen

Ich habe das Problem, dass mein destruktor doppelt aufgerufen wird. Ich weiß nicht wie das möglich ist.
Ich habe eine Klasse von TThread abgeleitet und von dieser Klasse wiederum meine aktuelle "Problem-Klasse" abgeleitet.
Ich stelle hier mehrfach für mich unlogisches Verhalten fest und die MemoryLeaks stapeln sich.
Hier erstmal meine Klasse:
Code: Alles auswählen
Type
TSocketThread = class( TBaseThread )
private
ServerSocket : TBlockSocket;
IsSocketCreated : Boolean;
protected
procedure Run; override;
procedure SocketCreated( Sender: TObject ); virtual;
public
constructor Create; overload; // Konstruktor
destructor Destroy; override; // Destruktor
procedure Connect( ipadress, port : string ); // Erzeugt den Socket und stellt eine Verbindung zum Remote her
procedure Disconnect; // Trennt die Verbindung und zerstoert den Socket
end;
// =============================================================================
// Implementation der Klassenfunktionen
// =============================================================================
implementation
// Konstruktor
constructor TSocketThread.Create;
begin
inherited Create( true );
IsSocketCreated := false;
ServerSocket := TBlockSocket.Create;
ServerSocket.OnCreateSocket := @SocketCreated;
end;
destructor TSocketThread.Destroy;
begin
//Disconnect;
//ServerSocket.Destroy;
inherited;
end;
und ihre Verwendung:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
Sock : TSocketThread;
begin
Sock := TSocketThread.Create;
Sock.Destroy;
end;
Wie kann es sein, dass unter den Bedingungen der Destruktor ("Destroy") mehrfach aufgerufen wird.
Wenn ich das "Sock.Destroy" weglasse, wird er übrigens gar nicht aufgerufen- Daraus schließe ich, dass "Sock" auch nicht im Stack liegt und nicht automatisch von der procedure entsorgt wird.
Oder anders gefragt: Wie kann derart einfacher Quelltext schon soviel Ärger produzieren?

gruß
Tobi