2016-04-10 23:54 GMT+02:00 Sven Barth <pascaldra...@googlemail.com>: > There are two things to differentiate: > > - Default() used in global variables > - Default() used locally > > The latter creates a local variable and basically FillChar()s it while the > former creates a zero initialized global variable. > (Thinking about this I could use the global variable approach also for > local uses of Default(), with the only special case being generics, but > that's another topic...) > > So in the local case you'd need to add an Initialize() after the > FillChar() call (if I haven't done that already). > In the global case you'd need to add the corresponding calls to the > implicit initialization function which is called before the unit's > initialization section. Currently class constructors are called before > that, but that's not good (though the implications are worse with the > finalization) and is subject to change. Please don't work around it > although right now it would work incorrectly for such variables used in > class constructors. > > Thanks for introduction. Workaround is not a case, eventually patch to fix order of class constructor/destructor and variable implicit initialization/finalization (as mentioned in http://bugs.freepascal.org/view.php?id=29245 ). Anyway I do research in this direction to cover all possible usage of new operators (seems like Default intrinsic is the last one).
Sven, could you look at topic "Management operators AddRef and Copy vs Copy" thread? New operators are ready for test in branch, anyway we can adjust the naming of AddRef and Copy. Florian proposed "Clone" (instead of Copy) and "Copy" (instead of AddRef). > Note: and don't forget the finalization ;) > "Finalize" is mentioned in thread name so it will not be forgotten ;) -- Best regards, Maciej Izak
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel