[fpc-devel] Pascal Smart Pointers Idea + ARC implementation

Michael Van Canneyt michael at freepascal.org
Sat Oct 10 12:16:41 CEST 2015



On Sat, 10 Oct 2015, Sven Barth wrote:

> Am 10.10.2015 11:12 schrieb "Michael Van Canneyt" <michael at freepascal.org>:
>>
>>
>>
>> On Sat, 10 Oct 2015, Maciej Izak wrote:
>>
>>> I am working on smart pointers for FPC (something more than pure ARC for
>>> classes).
>>>
>>> This solution is full compatible with existing code base.
>>>
>>> I would like to know what do you think about my conception and work.
>>>
>>> First step is almost done -> new record operators:
>>>
>>> === begin code ===
>>> {$MODESWITCH MANAGEMENTOPERATORS}
>>> type // Record with automatic constructor and destructor
>>>  TValue = record
>>>    class operator Initialize(var aRec: TValue);
>>>    class operator Finalize(var aRec: TValue);
>>>    class operator Copy(constref aSource: TValue; var aDest: TValue);
>>>  end;
>>> === end code ===
>>>
>>> MANAGEMENTOPERATORS are quite simple to implement. MANAGEMENTOPERATORS
> were
>>> created initially for fast implementation of TValue in RTTI.pas, but they
>>> inspired me for smart pointers.
>>
>>
>> This part I understand, it is simple enough. A managed record type ?
>
> I don't think a different type will be needed.

I'm not suggesting it either. 
Just looking for a term that concisely describes what it is :)

> 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 ;) )

I don't know how this works internally.
Is fpc_initialize called for every record type ? I sincerely hope not.
Does the compiler check the actual RTTI to decide whether fpc_initialize 
and friends are called ?

Michael.



More information about the fpc-devel mailing list