Не-не,
elide не путай товарища!
std::string использует copy-on-write, так что строка будет копироваться только если ты чего-нибудь запишешь во вновь созданную копию.
В твоем примере - и foo и bar будут указывать на одну область памяти содержащую "Hello, world!" до тех пор пока ты не сделаешь нечто вроде
На вопрос: что должен возвращать метод-аксессор есть общий ответ: то, аксесс к чему он предоставляет

.
Если то что он возвращает нежелательно менять, то возвращай константный указатель/ссылку.
Тебя интересует преимущество возврата по const ссылке по сравнению с чем?
Счетчики ссылок реализуются не в g++, а в libstdc++

.
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)