comp.lang.ada
 help / color / mirror / Atom feed
From: Lutz Donnerhacke <lutz@iks-jena.de>
Subject: Re: Limited_Controlled types as 'out' arguments
Date: Thu, 31 Jul 2003 12:19:17 +0000 (UTC)
Date: 2003-07-31T12:19:17+00:00	[thread overview]
Message-ID: <slrnbii29k.2j7.lutz@taranis.iks-jena.de> (raw)
In-Reply-To: s9vhivo9l8pk50sjn0eondi1eotjv2590e@4ax.com

* Dmitry A Kazakov wrote:
> On Thu, 31 Jul 2003 10:54:44 +0000 (UTC), Lutz Donnerhacke
>>   procedure Set(o1, o2 : out Test; i : Test) is
>>   begin
>>      Debug("Setting from", i.a);
>>      Debug("Setting o1  ", o1.a);
>>      Debug("Setting o2  ", o2.a);
>>      Finalize(o1);
>>      Finalize(o2);
>>      
>>      o1.a := new Character'(global);
>>      Debug("Setting to1 ", o1.a);
>>      global := Character'Succ(global);
>>
>>      o2.a := new Character'(i.a.all);
>>      Debug("Setting to2 ", o2.a);
>>   end Set;
> 
> Sort of, if you are calling Finalize from a normal subprogram! (:-))
> As for error, you call Set (a, a, b); which finalizes a twice! It is a
> language design fault that a destructor can be called explicitly. Your
> example shows why.

Changing the "Finalize" calls to "Free" causes the same effect.
So the main point is: How to manage resources correctly?

   procedure Set(o1, o2 : out Test; i : Test) is
   begin
      Debug("Setting from", i.a);
      if o1'Address /= o2'Address then
         Debug("Setting o1  ", o1.a);
         Free(o1.a);

         o1.a := new Character'(global);
         Debug("Setting to1 ", o1.a);
         global := Character'Succ(global);
      end if;

      Debug("Setting o2  ", o2.a);
      Free(o2.a);
      o2.a := new Character'(i.a.all);
      Debug("Setting to2 ", o2.a);
   end Set;

GNA!



  reply	other threads:[~2003-07-31 12:19 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-30 11:31 Limited_Controlled types as 'out' arguments Lutz Donnerhacke
2003-07-30 12:22 ` Dmitry A. Kazakov
2003-07-30 12:32   ` Lutz Donnerhacke
2003-07-30 14:24     ` Dmitry A. Kazakov
2003-07-30 14:25       ` Lutz Donnerhacke
2003-07-30 14:48         ` Dmitry A. Kazakov
2003-07-30 15:15           ` Lutz Donnerhacke
2003-07-31 10:26             ` Dmitry A. Kazakov
2003-07-31 10:54               ` Lutz Donnerhacke
2003-07-31 11:50                 ` Dmitry A. Kazakov
2003-07-31 12:19                   ` Lutz Donnerhacke [this message]
2003-07-31 13:15                     ` Dmitry A. Kazakov
2003-07-31 17:51                 ` Randy Brukardt
2003-07-30 15:01         ` Vinzent Hoefler
2003-07-30 15:16           ` Lutz Donnerhacke
2003-07-30 15:52         ` Lutz Donnerhacke
2003-07-30 19:30           ` Randy Brukardt
2003-07-31  7:43             ` Lutz Donnerhacke
2003-07-30 12:31 ` Matthew Heaney
2003-07-30 12:57   ` Lutz Donnerhacke
2003-07-30 13:47     ` Martin Dowie
2003-07-30 17:06     ` Matthew Heaney
2003-07-30 12:37 ` Martin Dowie
2003-07-30 12:59   ` Lutz Donnerhacke
2003-07-30 13:41     ` Martin Dowie
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox