Я хочу знать, вызывает ли это утечку памяти:
std::string test() { return *(new std::string("")); }
Да, это утечка памяти. Когда функция возвращается, делается копия оригинального строкового объекта.
Тогда оригинальный указатель new'а выходит из области видимости и теряется - утечка.
Чтобы сделать его менее протекающим, верните ссылку:
std::string& test() { return *(new std::string("")); }