From mboxrd@z Thu Jan 1 00:00:00 1970 Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Blady Newsgroups: comp.lang.ada Subject: Unchecked_Deallocation with tagged class type. Date: Tue, 14 Nov 2023 22:11:18 +0100 Organization: A noiseless patient Spider Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 14 Nov 2023 21:11:19 -0000 (UTC) Injection-Info: dont-email.me; posting-host="b0db478629f69b88ade2660b342a1b18"; logging-data="1475750"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+RhRXeBDhVlSxoz4s83/+a" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:8VIXoXOEj0f9HFmeibIX0GZiPao= Content-Language: fr, en-US Xref: news.eternal-september.org comp.lang.ada:65845 List-Id: Hello, The following code present a Finalize procedure with a parameter of access tagged class type in order to deallocate the memory of the given parameter from the root tagged type TTA and his children. The same for TTB which is inherited from TTA. But this Finalize call Finalize of TTA. It may be not the best idea. But let's see: with Ada.Unchecked_Deallocation; procedure test_20231113_free_tag is type TTA is tagged record AA : Integer; end record; type ATTA is access all TTA; type CATTA is access all TTA'Class; procedure Finalize (O : in out CATTA) is procedure Free is new Ada.Unchecked_Deallocation (TTA, ATTA); begin Free (ATTA (O)); end Finalize; type TTB is new TTA with record BB : Integer; end record; type ATTB is access all TTB; type CATTB is access all TTB'Class; procedure Finalize (O : in out CATTB) is begin Finalize (CATTA (O)); end Finalize; OA : CATTA := new TTA; OB : CATTB := new TTB; begin Finalize (OA); Finalize (OB); end test_20231113_free_tag; The procedure Free is the instanciation of Unchecked_Deallocation with the tagged type TTA. Thus the call "Finalize (OA);" deallocate the memory of object OA of type access class TTA. But what does "Finalize (OB);"? What is the memory deallocate of object OB of type TTB? Thanks, Pascal.