<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type></HEAD>
<BODY dir=ltr bgColor=#ffffff text=#000000>
<DIV dir=ltr>
<DIV style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial'; COLOR: #000000">
<DIV>100% agree, although although smart pointers also can already be 
implemented in Delphi with anonymous methods.</DIV>
<DIV>I wanted to mention the possibility actually in my post.</DIV>
<DIV>For good smart pointer however we also will need implicit casting, operator 
overloading and few other features, but it surely is an option.</DIV>
<DIV>As for STL, we actually already have implemented some aspects of it in 
Mitov.Runtime (Free library) for Delphi, and will be doing more.</DIV>
<DIV>I am huge fan of STL/boost and the concept based development, and I use 
some aspects of it even in Delphi (to the extend the language and the generics 
allow).</DIV>
<DIV> </DIV>
<DIV style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial'; COLOR: #000000">With best 
regards,<BR>Boian 
Mitov<BR><BR>-------------------------------------------------------<BR>Mitov 
Software<BR>www.mitov.com<BR>-------------------------------------------------------</DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV style="FONT: 10pt tahoma">
<DIV> </DIV>
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A 
title=nickysn@users.sourceforge.net 
href="mailto:nickysn@users.sourceforge.net">Nikolay Nikolov</A> </DIV>
<DIV><B>Sent:</B> Wednesday, September 24, 2014 3:34 PM</DIV>
<DIV><B>To:</B> <A title=fpc-devel@lists.freepascal.org 
href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</A> 
</DIV>
<DIV><B>Subject:</B> Re: [fpc-devel] Suggestion: reference counted 
objects</DIV></DIV></DIV>
<DIV> </DIV></DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV class=moz-cite-prefix>On 09/23/2014 08:47 PM, Boian Mitov wrote:<BR></DIV>
<BLOCKQUOTE cite=mid:AF0D5554B62E4F0E9B6440C41433FA97@mpc1 type="cite">
  <DIV dir=ltr>
  <DIV style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial'; COLOR: #000000">
  <DIV>This is a valid point.</DIV>
  <DIV>The only downside is that the object will every time do a deep copy 
  versus a shallow (pointer only) copy. Deep copy is very, very expensive 
  operation.</DIV>
  <DIV>Adding ref. counting to objects is probably equivalent of one interlocked 
  assembly instruction, so a very small difference, probably not even 
  measurable.</DIV>
  <DIV>Copy of a large object can take a large memory transfer, and will also 
  reserve memory for each copy, thus significantly increasing memory.</DIV>
  <DIV>While both approaches have something going for them, they are not total 
  subside for each other.</DIV></DIV></DIV></BLOCKQUOTE>Yes, but if you have 
compiler support for objects with automatic calls of 
constructors/destructor/copy constructor/assignment operator (like in C++ 
classes), and if you also have generics support for objects, you can make a 
generic smart pointer object type that adds reference counting to any class. And 
then the regular class references will serve as weak references. Exactly like 
C++:<BR><BR><A class=moz-txt-link-freetext 
href="http://www.boost.org/doc/libs/1_56_0/libs/smart_ptr/smart_ptr.htm">http://www.boost.org/doc/libs/1_56_0/libs/smart_ptr/smart_ptr.htm</A><BR><BR>What's 
more important is that we can extend objects this way, without breaking backward 
compatibility. But, unfortunately, it's a huge slippery slope from there, as 
anyone, who has dealt with C++ STL error messages knows:<BR><BR><A 
class=moz-txt-link-freetext 
href="http://pascalg.wordpress.com/2008/02/24/stl-error-messages-are-so-great/">http://pascalg.wordpress.com/2008/02/24/stl-error-messages-are-so-great/</A><BR><BR>Nikolay</DIV></DIV></DIV></BODY></HTML>