![]() |
Problem mit TObject
Hallo zusammen,
ich habe ein Problem mit TObject. Ich habe folgendes gemacht:
Delphi-Quellcode:
Der Kopf wird aber durch das Free nicht gelöscht?!
Kopf : TObject;
..... Kopf.Free; Was muss ich tun damit der Kopf gelöscht wird? Vielen Dank! |
Re: Problem mit TObject
Delphi-Quellcode:
FreeAndNil( Kopf);
|
Re: Problem mit TObject
wenn ich dann aber "kopf" wieder erstelle, bekomme ich eine Fehlermeldung(Access Violation).
|
Re: Problem mit TObject
Könntest du mal ein bisschen mehr verraten, was du machst?
|
Re: Problem mit TObject
Hi,
erstmal vorweg möchte ich Sirius voll zustimmen, es sind echt wenige Info's die Du da bereit stellst, das macht es nicht gerade einfach Dir zu helfen! Da Du aber von einem Kopf und Löschen sprichst, denke ich mal, dass Du eine Aufgabe hast, die das Thema Queue/Schlange oder verkettete Liste behandelt? Wenn dem so ist, dann wird kein einfacher Befehl das Löschen übernehmen. Da musst Du schon zeigen, wie Dein kompletter Ansatz bisher aussieht. Gelöscht wird der Kopf im übrigen mit dem Free schon (aus dem Speicher wird er entfernt), aber Du behälst noch eine Referenz auf diesen Speicherbereich (der allerdings kein gültiges Datum mehr enthält). Mit FreeAndNil sorgst Du dann dafür, dass die Referenz aut. auf nil zeigt, einen Speicherbereich von dem Du (und Delphi) weißt dass er nicht gültig sein kann. Mittels assigned kannst Du dann prüfen, ob der Kopf im Moment auf nil zeigt oder nicht (achtung, Du kannst nicht prüfen ob der Speicher schon frei gegeben wurde!) Gruß Der Unwissende |
Re: Problem mit TObject
Ich generiere ein TObject mit
Delphi-Quellcode:
In diesem kopf werden mehrere TObjects geladen.
kopf.create;
Ich Lösche das TObject mit
Delphi-Quellcode:
dann steht aber im Kopf noch sämtliche Daten drin.
kopf.free;
d.h. wenn ich das TObject nochmals erstelle, dann nimmt er die Daten aus dem vorherigen Kopf, obwohl ich diese mit free gelöscht habe. NilAndFree habe ich auch schon ausprobiert. Ich komme aber auf keinen grünen Zweig. |
Re: Problem mit TObject
Zitat:
Delphi-Quellcode:
kopf := TKopf.Create;
Zitat:
|
Re: Problem mit TObject
so ungefähr siehts aus...
Delphi-Quellcode:
TKopf = class(TObject)
A : TObject ... end; Kopf := TKopf.Create; ... Kopf.Free; Kopf := nil; ... Kopf := TKopf.Create; // Fehler Access Violation // Daten wurden aus vorherigem TKopf nicht gelöscht |
Re: Problem mit TObject
Was willst du?
Nach "Kopf:=TObject.create" ist A immer nil. |
Re: Problem mit TObject
ja ist nil, ist richtig, aber ich kann den zweiten create Befehl nicht ausführen, weil ich eine Access Violation bekomme.
|
Re: Problem mit TObject
Zeig mal den Code deines Konstruktors.
|
Re: Problem mit TObject
Delphi-Quellcode:
constructor TKopf.Create;
begin inherited Create; A := tObject.Create; end; destructor TKopf.Destroy; begin A.free; A := nil; inherited Destroy; end; |
Re: Problem mit TObject
Zitat:
|
Re: Problem mit TObject
wie muss ich das jetzt verstehen?
|
Re: Problem mit TObject
Dass es keinen Sinn macht, eine Instanz von TObject anzulegen.
|
Re: Problem mit TObject
Ein TObject wird per Compilermagic erzeugt. Ich würde aber in abgeleiteten Klassen trotzdem inherited aufrufen.
|
Re: Problem mit TObject
also eigentlich, sollte es dann so funktionieren wie ich es gemacht habe?!
|
Re: Problem mit TObject
TObject ist eine abstrakte Klasse.
|
Re: Problem mit TObject
Zitat:
Zitat:
jkr |
Re: Problem mit TObject
Zitat:
Zitat:
|
Re: Problem mit TObject
[quote="Ghostwalker"]
Zitat:
Delphi-Quellcode:
erhalte ich die Meldung "Methode 'Destroy' verbigt virtuelle vom Basistyp 'TObject'".
type
TTest= class public destructor Destroy; end; jkr |
Re: Problem mit TObject
Jetzt wo du es sagst..stimmt mit dem virtual.
Dennoch steht der Hinweis so in der Hilfe bei mir :) Mal ganz davon abgesehen, das man mit einer Instanz von TObject nicht wirklich was anfangen kann :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz