вернуть разыменованный новый - утечка памяти? - PullRequest
3 голосов
/ 28 ноября 2011

Я хочу знать, вызывает ли это утечку памяти:

std::string test() {
    return *(new std::string(""));
}

Ответы [ 2 ]

12 голосов
/ 28 ноября 2011

Да, это утечка памяти. Когда функция возвращается, делается копия оригинального строкового объекта.

Тогда оригинальный указатель new'а выходит из области видимости и теряется - утечка.

0 голосов
/ 28 ноября 2011

Чтобы сделать его менее протекающим, верните ссылку:

std::string& test() {
   return *(new std::string(""));
}
...