> 1. Я так понял, что вы действительно не понимаете разницу между понятием "вернуть строку" и "вернуть указатель на строку". Объясняю – в ваших примерах вызывающая функция должна строку освободить. Если функция универсальна, то она не может знать – освобождать память или нет. Вызов конструкции A(B(C(S))) превращается в кошмар.
Вы, похоже, не знакомы толком ни с Си++, ни с Дельфами.