an RefCount direkt würde ich nicht rumspielen.
ich behandle zwar Stringvaiablen wie Pointer (was sie ja im Grunde auch sind) und so kann man nette Dinge mit machen, aber ein "schöner" Weg ist das nicht gerade (wenn er auch einfach ist), aber wie du schon bemerkt hast, kann man sich so (falls man nicht aufpasst) ein Speicherleck einfangen.
was hindert dich eigentlich daran selber Speicher zu resservieren und freizugeben?
Delphi-Quellcode:
Var P: PChar;
P := GetMemory(Length(S) + 1);
MoveMemory(P, PChar(S), Length(S) + 1);
jetzt kannst du mit P alles machen, was du willst
und wenn der String nicht mehr benötigt wird, dann den Speicher per FreeMemory(P) wieder freigen.