Wann das genau alles freigegeben wird, kann ich auch nicht mehr sagen.
Aber wer mal ausprobieren will wann es passiert, der kann das ganz einfach im Destructor der Klasse mitlogen/debuggen.
eventuell räumt der bei Sitzungsende uch schon auf.
Bei einigen Typen (z.B. Streams), da stellt Delphi ein Property bereit, über das man regeln kann "ob" diese Objekte von dir oder vom DataSnap freigegeben werden sollen, also in den automatisch generierten Klientklassen ist es zumindestens so.
Wer zurückgegebene Objekte über "längere" Zeit und vorallem über mehrere DataSnapFunktionsaufrufe hinweg aufheben will, der muß sich sowieso selber um die Freigabe kümmern, denn sonst klaut einem das DataSnap das Objekt unterm Arsch weg.
Delphi-Quellcode:
A := DS.RegisterUser('a@b.c');
B := DS.RegisterUser('x@y.z');
MachWas(A); // A ist hier vermutlich schon weg, bzw. durch B ersetzt
MachWas(B);