From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Allocators and exceptions
Date: Wed, 12 Sep 2007 17:32:52 -0500
Date: 2007-09-12T17:32:52-05:00 [thread overview]
Message-ID: <fc9p94$rt6$1@jacob-sparre.dk> (raw)
In-Reply-To: m2ir6fobaz.fsf@mac.com
"Simon Wright" <simon.j.wright@mac.com> wrote in message
news:m2ir6fobaz.fsf@mac.com...
> Maciej Sobczak <see.my.homepage@gmail.com> writes:
>
> > What should the constructor do *after* handling the exception?
> > Leave the object half-baked?
>
> I'm not sure exactly what Stephe meant by 'propagate'. It certainly
> seems a bad idea to allow a Constraint_Error to propagate
> unhandled. But what would be wrong with dealing with the problem and
> then raising an appropriate exception from the constructor? (even
> Constraint_Error if gnat makes sense).
Because Ada *requires* storage leakage in such cases (although some
compilers ignore the language definition and finalize anyway). An allocated
object cannot be finalized until it's *type* is finalized or until an
Unchecked_Deallocation is called -- and an Unchecked_Deallocation is not
going to be called if a constructor propagates an exception. So the
(inaccessible) object is supposed to hang around for a long, long time.
The "proper" way to handle this is to ensure that default initialize of an
object never propagates an exception, and then wrap the allocator properly:
type Access_T is access all T;
procedure Free is new Unchecked_Deallocation (T, Access_T);
function Alloc_Object (...) return Access_T is
A_T : Access_T := new T; -- Default initialized.
begin
A_T.all := <constructor>;
return A_T;
exception
when others => Free(A_T); return null;
end Alloc_Object;
But I'm not going to argue that this is an ugly and complex way of handling
this.
Randy.
next prev parent reply other threads:[~2007-09-12 22:32 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-09 7:40 Allocators and exceptions Maciej Sobczak
2007-09-09 12:17 ` anon
2007-09-09 20:31 ` Maciej Sobczak
2007-09-09 22:43 ` Simon Wright
2007-09-10 12:10 ` Maciej Sobczak
2007-09-10 19:08 ` Simon Wright
2007-09-10 2:56 ` anon
2007-09-10 12:42 ` Dmitry A. Kazakov
2007-09-10 21:48 ` Maciej Sobczak
2007-09-11 9:16 ` Dmitry A. Kazakov
2007-09-11 9:19 ` Maciej Sobczak
2007-09-11 12:27 ` Dmitry A. Kazakov
2007-09-11 19:07 ` Maciej Sobczak
2007-09-11 22:56 ` Georg Bauhaus
2007-09-12 12:36 ` Maciej Sobczak
2007-09-12 22:19 ` Randy Brukardt
2007-09-12 9:32 ` Dmitry A. Kazakov
2007-09-12 12:42 ` Maciej Sobczak
2007-09-12 15:25 ` Dmitry A. Kazakov
2007-09-12 12:29 ` Stephen Leake
2007-09-12 12:46 ` Maciej Sobczak
2007-09-12 20:53 ` Simon Wright
2007-09-12 22:32 ` Randy Brukardt [this message]
2007-09-12 23:43 ` Simon Wright
2007-09-13 3:42 ` Randy Brukardt
2007-09-13 3:36 ` Randy Brukardt
2007-09-13 9:43 ` Maciej Sobczak
2007-09-12 22:25 ` Randy Brukardt
2007-09-13 11:51 ` Stephen Leake
2007-09-12 14:14 ` Markus E L
2007-09-10 10:37 ` Allocators and exceptions => Read Me First anon
2007-09-10 12:16 ` Maciej Sobczak
2007-09-10 22:10 ` Allocators and exceptions => Trying Again anon
2007-09-10 23:15 ` Markus E L
2007-09-10 15:44 ` Allocators and exceptions Adam Beneschan
2007-09-10 21:58 ` Maciej Sobczak
2007-09-10 22:07 ` Jeffrey R. Carter
2007-09-11 9:14 ` Dmitry A. Kazakov
2007-09-11 9:23 ` Maciej Sobczak
2007-09-11 2:36 ` Randy Brukardt
2007-09-11 15:33 ` Adam Beneschan
2007-09-11 19:21 ` Maciej Sobczak
2007-09-11 21:56 ` Adam Beneschan
2007-09-12 0:34 ` Jeffrey R. Carter
2007-09-12 12:13 ` Maciej Sobczak
2007-09-12 16:34 ` Jeffrey R. Carter
2007-09-12 23:50 ` Jeffrey R. Carter
2007-09-12 12:22 ` Maciej Sobczak
2007-09-12 14:11 ` Markus E L
2007-09-12 16:08 ` Adam Beneschan
2007-09-12 20:35 ` Dmitry A. Kazakov
2007-09-12 21:01 ` Adam Beneschan
2007-09-12 22:45 ` Randy Brukardt
2007-09-13 7:48 ` Dmitry A. Kazakov
2007-09-12 3:08 ` Allocators and exceptions -- Debugging says memory leak! anon
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox