<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-01-27 17:24 GMT+01:00 Sven Barth <span dir="ltr"><<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@googlemail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span><p></p>
</span><p>I'll need to look at your code again, but even for class functions the same rules (and worries) as for normal methods apply.</p></blockquote>I hope that your research in Generics.Defaults will be successful for manual interfaces :P<br><br>Most important about manual interfaces, and why can't be used any other solution <span id="result_box" class="" lang="en"><span class="">without</span> <span class="">painful</span> <span class="">consequences</span></span>:<br><br>1. we don't want to use ARC interfaces (for singletons created at startup in Generics.Defaults)<br>side note: in Generics.Defaults is introduced TSingletonImplementation for non ARC COM interfaces<br><br>2. even if point 1. is simple to achieve, it brings a lot of problems because we need to keep somewhere our singletons and that means:<br><br>SIGSEGV exception is guaranteed, during closing application in many scenarios<span id="result_box" class="" lang="en"><span class=""></span></span><br><div><br></div><div>program X;<br></div><div>uses<br></div><div>  A, B;<br></div><div>begin end.<br></div><div><br></div><div>A source code:<br><br>unit A; interface uses Contnrs; <br>  var GarbageCollector: Contnrs.TObjectList;  <br>implementation initialization<br>  GarbageCollector := Contnrs.TObjectList.Create(true);<br></div><div>finalization<br>  GarbageCollector.Free;<br></div><div>end.<br> </div><div><br></div><div>in B is used A and Generics.Collections.<br><br>unit B; interface uses A, Generics.Collections; implementation<br>begin<br>  GarbageCollector.Add(TDictionary.Create);<br><div>end.<br> </div><br>Generics.Collections (which is using Generics.Defaults) and our Generics.Defaults is released before A. <span id="result_box" class="" lang="en"><span class="">It will cause</span> <span class="">a memory</span> <span class="">violation </span></span>in Generics.Defaults for our singleton O__o.<br><br></div><div>To avoid this <span id="result_box" class="" lang="en"><span class="">memory</span> <span class="">violation</span></span> is necessary to omit point 1.<br><br></div><div>3. To avoid <span id="result_box" class="" lang="en"><span class="">memory</span> <span class="">violation</span></span>, any instance of collection should be owner of instance of IComparer / <span class="">IEqualityComparer and that is performance and memory killer in comparison to manual interfaces.<br></span></div></div>-- <br><div><div dir="ltr"><div>Best regards,<br>Maciej Izak</div></div></div>
</div></div>