<p>Am 10.10.2015 11:12 schrieb "Michael Van Canneyt" <<a href="mailto:michael@freepascal.org">michael@freepascal.org</a>>:<br>
><br>
><br>
><br>
> On Sat, 10 Oct 2015, Maciej Izak wrote:<br>
><br>
>> I am working on smart pointers for FPC (something more than pure ARC for<br>
>> classes).<br>
>><br>
>> This solution is full compatible with existing code base.<br>
>><br>
>> I would like to know what do you think about my conception and work.<br>
>><br>
>> First step is almost done -> new record operators:<br>
>><br>
>> === begin code ===<br>
>> {$MODESWITCH MANAGEMENTOPERATORS}<br>
>> type // Record with automatic constructor and destructor<br>
>>  TValue = record<br>
>>    class operator Initialize(var aRec: TValue);<br>
>>    class operator Finalize(var aRec: TValue);<br>
>>    class operator Copy(constref aSource: TValue; var aDest: TValue);<br>
>>  end;<br>
>> === end code ===<br>
>><br>
>> MANAGEMENTOPERATORS are quite simple to implement. MANAGEMENTOPERATORS were<br>
>> created initially for fast implementation of TValue in RTTI.pas, but they<br>
>> inspired me for smart pointers.<br>
><br>
><br>
> This part I understand, it is simple enough. A managed record type ?</p>
<p>I don't think a different type will be needed. Just allow those three operator overloads for normal records and have them be present in the Init RTTI of the record so that fpc_initialize(), fpc_finalize() and fpc_copy() can pick them up. This will be needed anyway should such records be placed in arrays or other records or classes. (Of course from great power comes great responsibility ;) )</p>
<p>><br>
> That would mean that the managed pointer/class would be implemented internally using a 'managed record', correct ? I like this approach, quite ingenious :)</p>
<p>It's similar to the approach we use at work in C++. Simplyfies things quite a bit when one doesn't have to deal with delete ;)</p>
<p>Regards,<br>
Sven</p>