From: Brad Moore <brad.moore@shaw.ca>
Subject: Re: newbie: can't read fast enough... :-) memory leaks...
Date: Thu, 04 Sep 2014 08:23:50 -0600
Date: 2014-09-04T08:23:50-06:00 [thread overview]
Message-ID: <WB_Nv.132587$oe6.88682@fx29.iad> (raw)
In-Reply-To: <lu8ti4$lqq$2@dont-email.me>
On 2014-09-03 11:32 PM, Jeffrey Carter wrote:
> On 09/03/2014 09:57 PM, Brad Moore wrote:
>>
>> declare
>> type String_Access is access String;
>> A, B : String_Access;
>> begin
>> A := new String'("String 1");
>> B := new String'("String 2");
>> ... -- Operate on the data.
>> end;
>> -- A and B are automatically freed here because the String_Access
>> -- is finalized since the scope of the declaration of the access
>> -- type is being exited, and finalizing an access type also
>> -- finalizes its collection (allocated objects designated by that
>> -- type).
>>
>> This is a nice way to free up a bunch of objects that are no longer needed, if
>> it can be guaranteed that the objects are only needed in a nested scope. I like
>> this better than garbage collection, because the
>> deallocation occurs more consistently, when and where it is needed.
>> I view this as being less error prone, if one is able to take advantage of this
>> approach.
>
> Recent comments here in another thread indicate that this only works if
> 'Storage_Size is defined for the access type.
>
That doesn't appear to be correct.
In the latest GNAP GPL, the following program outputs;
Finalizing
Finalizing
Exited Block
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Finalization; use Ada;
procedure Test_Deallocation is
begin
declare
type T is new Finalization.Limited_Controlled with null record;
overriding procedure Finalize (Object : in out T);
overriding procedure Finalize (Object : in out T) is
begin
Put_Line ("Finalizing ");
end Finalize;
type T_Access is access T;
T1, T2 : T_Access;
begin
T1 := new T;
T2 := new T;
end;
Put_Line ("Exited Block");
end Test_Deallocation;
next prev parent reply other threads:[~2014-09-04 14:23 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-03 9:38 newbie: can't read fast enough... :-) memory leaks gdotone
2014-09-03 10:17 ` Pascal Obry
2014-09-03 10:48 ` G.B.
2014-09-03 15:50 ` Pascal Obry
2014-09-03 17:28 ` Robert A Duff
2014-09-03 17:36 ` Pascal Obry
2014-09-03 19:09 ` gdotone
2014-09-03 19:19 ` gdotone
2014-09-03 19:29 ` Dmitry A. Kazakov
2014-09-03 20:19 ` Robert A Duff
2014-09-03 19:19 ` Dmitry A. Kazakov
2014-09-03 20:31 ` Robert A Duff
2014-09-04 7:18 ` Dmitry A. Kazakov
2014-09-04 4:57 ` Brad Moore
2014-09-04 5:32 ` Jeffrey Carter
2014-09-04 7:23 ` Dmitry A. Kazakov
2014-09-04 14:23 ` Brad Moore [this message]
2014-09-04 15:36 ` Brad Moore
2014-09-04 18:28 ` Robert A Duff
2014-09-05 4:58 ` anon
2014-09-05 9:45 ` Simon Wright
2014-09-05 21:54 ` anon
2014-09-06 6:28 ` Simon Wright
2014-09-04 15:55 ` G.B.
2014-09-04 16:43 ` Jeffrey Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox