<div dir="ltr"><div><div>Hi,<br><br></div>Sven proposed that we need to discuss AddRef operator (important part of smart pointers implementation).<br><br>AddRef is used when record is passed as parameter to method/function by value (for records to large to copy (only the address is pushed)). AddRef is used also for dynamic array operations (temporary for SetLength operation and for Copy operation for already copied data by move).<br><br>AddRef is much faster than Copy (all data already exist, so we don't need to copy anything). AddRef is used to increment ref count for managed types.<br><br></div><div>IMO the best solution is to implement two operators:<br><br>    class operator AddRef(var aFoo: TFoo);<br>    class operator Copy(constref aSrc: TFoo; var aDst: TFoo);<br><br></div><div>also is possible to implement single operator:<br><br>    class operator Copy(aSrc: PFoo; var aDst: TFoo);<br><br></div><div><div><div>aSrc in that case can be nil (for AddRef operation). Anyway that is <span id="result_box" class="" lang="en"><span>inelegant</span> <span class="">solution...<br><br></span></span></div><div><span id="result_box" class="" lang="en"><span class="">Any other solution means big performance loss for RTL operations for dynamic arrays.</span></span><br><br>-- <br><div class="gmail_signature"><div dir="ltr"><div>Best regards,<br>Maciej Izak</div></div></div>
</div></div></div></div>