Problemem jest to, że ciebie mają zastąpić wirtualny destruktor Destroy
. Ten wirtualny destruktor jest nazywany przez nie-wirtualną metodę Free
.
W obecnej wersji jedynym sposobem na zniszczenie klasy jest bezpośrednie wywołanie destruktora. Oczekuje się, że klasy Delphi będą niszczone za pomocą metody Free
.
Twoja klasa powinna być tak:
type
TobjAvisos = class
public
constructor Create;
destructor Destroy; override;
end;
Zastępowanie destruktor wirtualny Destroy
jest jedynym sposobem, aby uczynić swoją pracę klasy poprawnie metodą Free
.
Obecnie istnieją dwa główne powody korzystania destruktora wirtualny Destroy
i wspieranie Free
:
Free
śmiało można nazwać na odniesienie nil
obiektu. Destruktor nie może. Ma to zasadnicze znaczenie dla mechanizmu konstrukcji obiektu do obsługi wyjątków.
- Obsługa obiektu
Free
umożliwia bezpieczne niszczenie obiektu, nawet jeśli typ obiektu czasu jest bardziej wyprowadzony niż typ czasu kompilacji odwołania do obiektu.
Niektóre użyteczne odczyt na tematy pokrewne można znaleźć tutaj: Why should I not use "if Assigned()" before using or freeing things?
miałem zamiar odwołać moje stare pytanie, a potem widziałem już to zrobiłeś :-) –
@David. Więc tworzę moją klasę, o której wspomniałeś w swojej odpowiedzi z Destroy, ale nadal mogę zadzwonić do .Free, a klasa i poprawnie "uwolnić" i zwolnić pamięć? – Jlouro
Tak. Autor klasy przesłania 'Destroy' i implementuje niezbędny kod destruktora w tym nadpisanym destruktorze. Konsumenci klasy nazywają nie-wirtualną metodą "Free". Zobacz odpowiedź, do której link się po szczegóły. –