comp.lang.ada
 help / color / mirror / Atom feed
From: Victor Porton <porton@narod.ru>
Subject: Re: Limited object by reference or access argument?
Date: Mon, 07 Aug 2017 03:35:46 +0300
Date: 2017-08-07T03:35:46+03:00	[thread overview]
Message-ID: <om8cl0$1q08$1@gioia.aioe.org> (raw)
In-Reply-To: om88a9$1kis$1@gioia.aioe.org

Victor Porton wrote:

> Victor Porton wrote:
> 
>> Victor Porton wrote:
>> 
>>> Suppose we have
>>> 
>>> type World_Type is tagged limited private;
>>> 
>>> type BNode_ID_Handler is abstract tagged limited private;
>>> 
>>> We need to set a bnode handler for a world object. Should the procedure
>>> signature be
>>> 
>>> procedure Set_Handler (World: World_Type;
>>>                        Handler: access BNode_ID_Handler'Class);
>>> 
>>> or
>>> 
>>> procedure Set_Handler (World: World_Type;
>>>                        Handler: BNode_ID_Handler'Class);
>>> 
>>> The later can work with limited BNode_ID_Handler type, because tagged
>>> and limited types are always passed by reference.
>>> 
>>> I prefer the second one, because with the first procedure signature it
>>> is possible to pass an access to an already finalized object what is an
>>> error, but want to ask you opinion which of the two procedure signatures
>>> is better.
>> 
>> It may work like this (in fact it is more complex):
>> 
>> type World_Type is tagged limited
>>    record
>>       Handler: access BNode_ID_Handler'Class;
>>    end;
>> 
>> procedure Set_Handler (World: World_Type;
>>                        Handler: BNode_ID_Handler'Class) is
>> begin
>>    World.Handler := Handler'Unchecked_Access;
>> end;
> 
> I think it should be access parameter, because (as of Ada2005 and above)
> this allows passing null, what may be useful in some situations.

Another argument for access types is that if we switch to a non-limited 
type, copying the Handler object may not happen (and we should be sure that 
it is not copied by the compiler).

-- 
Victor Porton - http://portonvictor.org

  reply	other threads:[~2017-08-07  0:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-06 21:16 Limited object by reference or access argument? Victor Porton
2017-08-06 22:01 ` Victor Porton
2017-08-06 23:21   ` Victor Porton
2017-08-07  0:35     ` Victor Porton [this message]
2017-08-07 23:31     ` Randy Brukardt
2017-08-07 14:10 ` Jere
2017-08-07 23:28 ` Randy Brukardt
replies disabled

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