Bei nicht elementaren Typen wird übrigens immer nur eine Referenz zurückgegeben, so dass man da nicht zusätzlich mit Pointern hantieren muss. Ausgenommen davon sind aber Delphi-Strings, und ich glaube auch Records und statische Arrays - diese werden ohne Handarbeit ByValue übergeben.
Edit: Bei statischen Arrays aber dann auch nur lokale wenn ich mich nicht irre, für die es ja auch Sinn macht. 100%ig sicher bin ich allerdings nicht, wie es für alle möglichen Fälle im einzelnen aussieht.
(Das aber nur der Vollständigkeit halbar
)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)