3 package Smart_Pointers
is
5 -- Classes we want to track derrive from Base Class.
6 type Base_Class
is abstract tagged private;
8 type Base_Class_Accessor
is access Base_Class
'Class;
11 type Smart_Pointer
is private;
13 function New_Ptr
(Base_Class
: Base_Class_Accessor
) return Smart_Pointer
;
15 function Deref
(Ptr
: Smart_Pointer
) return Base_Class_Accessor
;
17 Null_Smart_Pointer
: constant Smart_Pointer
;
21 type Base_Class
is abstract tagged record
22 Ref_Count
: Natural := 1;
26 type Smart_Pointer
is new Ada
.Finalization
.Controlled
with record
27 Pointer
: Base_Class_Accessor
;
30 overriding
procedure Adjust
(Object
: in out Smart_Pointer
);
32 overriding
procedure Finalize
(Object
: in out Smart_Pointer
);
34 Null_Smart_Pointer
: constant Smart_Pointer
:=
35 (Ada
.Finalization
.Controlled
with Pointer
=> null);