From: Blady <p.p11@orange.fr>
Subject: Unchecked_Deallocation with tagged class type.
Date: Tue, 14 Nov 2023 22:11:18 +0100 [thread overview]
Message-ID: <uj0npn$1d156$1@dont-email.me> (raw)
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.
next reply other threads:[~2023-11-14 21:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-14 21:11 Blady [this message]
2023-11-14 22:42 ` Unchecked_Deallocation with tagged class type Dmitry A. Kazakov
2023-11-15 20:26 ` Blady
2023-11-15 21:17 ` Dmitry A. Kazakov
2023-11-16 20:29 ` Blady
2023-11-17 13:12 ` AdaMagica
2023-11-17 13:13 ` AdaMagica
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox