From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Why is the destructor called multiple times after I declare an object?
Date: Tue, 12 Jan 2016 10:33:48 +0100
Date: 2016-01-12T10:33:48+01:00 [thread overview]
Message-ID: <n72hag$bjq$1@gioia.aioe.org> (raw)
In-Reply-To: n71epa$b1h$1@loke.gir.dk
On 12/01/2016 00:44, Randy Brukardt wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> news:n715oq$fae$1@gioia.aioe.org...
>> On 2016-01-11 19:17, Bob Duff wrote:
>>> Brian Drummond <brian@shapes.demon.co.uk> writes:
>>>
>>>> Somehow I expected "extended return" to allocate space and "build in
>>>> place" during the execution of the return statement.
>>>
>>> Build-in-place is done for return of immutably-limited types,
>>> whether or not the extended return syntax is used.
>>
>> But you can leave one return statement on an exception, catch the
>> exception, and then return through another return statement, with other
>> discriminants and even other type of the result (if it is class-wide).
>>
>> Therefore the result can be potentially allocated and reallocated any
>> number of times. In which sense is this behavior 'in-place'?
>
> "Build-in-place" means simply that there is no temporary object, the object
> is created directly in its final resting place (that is the memory where it
> will live during its existence).
>
> Whatever amount of effort it takes to figure out that final resting place is
> not part of the equation.
Yes, but you said 'no temporary object' which is untrue because a return
statement creates exactly such an object. You could even use this object
in order to create another one:
return Candidate_1 : T (Size => 1) do
Size := Candidate_1.Get_Required_Size;
raise Try_Again;
end return;
exception
when Try_Again =>
return Candidate_2 : T (Size => Size) do
...
end return;
Since Ada lacks proper user-defined constructors one cannot claim that
Candidate_1 was not fully constructed. Even its Initialize was through.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2016-01-12 9:33 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-11 1:37 Why is the destructor called multiple times after I declare an object? Andrew Shvets
2016-01-11 2:18 ` Jeffrey R. Carter
2016-01-11 3:35 ` Andrew Shvets
2016-01-11 17:02 ` Brian Drummond
2016-01-11 16:29 ` Brian Drummond
2016-01-11 17:20 ` Simon Wright
2016-01-11 18:17 ` Bob Duff
2016-01-11 21:10 ` Dmitry A. Kazakov
2016-01-11 23:44 ` Randy Brukardt
2016-01-12 9:33 ` Dmitry A. Kazakov [this message]
2016-01-12 20:21 ` Randy Brukardt
2016-01-12 21:05 ` Dmitry A. Kazakov
2016-01-13 0:02 ` Robert A Duff
2016-01-13 8:31 ` Dmitry A. Kazakov
2016-01-13 9:01 ` Georg Bauhaus
2016-01-13 14:45 ` J-P. Rosen
2016-01-13 20:09 ` Dmitry A. Kazakov
2016-01-14 9:04 ` J-P. Rosen
2016-01-14 9:47 ` Dmitry A. Kazakov
2016-01-13 16:03 ` Robert A Duff
2016-01-13 19:59 ` Dmitry A. Kazakov
2016-01-14 10:04 ` Georg Bauhaus
2016-01-14 13:42 ` Dmitry A. Kazakov
2016-01-12 12:41 ` Brian Drummond
2016-01-13 20:18 ` Jacob Sparre Andersen
2016-01-14 1:31 ` Robert A Duff
2016-01-12 0:43 ` Jeffrey R. 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