Я довольно новичок со строками C++, поэтому следующий шаблон может быть немного уродливым. Я просматриваю код, который я написал, прежде чем начинать интеграционное тестирование с помощью более крупной системы. Что я хотел бы знать, если это безопасно, или если он будет подвержен утечке памяти?Возвращает объект std :: string C++, защищенный от утечек памяти?
string somefunc(void) {
string returnString;
returnString.assign("A string");
return returnString;
}
void anotherfunc(void) {
string myString;
myString.assign(somefunc());
// ...
return;
}
Понимание у меня есть, что значение returnString присваивается новый объект MyString, а затем объект returnString уничтожается как часть решения вызова SomeFunc. В какой-то момент в будущем, когда myString выходит за рамки, он тоже уничтожается.
Я бы обычно передавал указатель на myString в somefunc() и напрямую присваивался значения myString, но я стараюсь быть немного более ясным в своем коде (и меньше полагаюсь на стиль функции побочных эффектов).
В первой функции вы, вероятно, могли бы просто «вернуть строку» («Строка»); и имеют тот же результат. – luiscubal
@luiscubal Это упрощенный пример, иллюстрирующий проблему. – Stephen
@luiscubal even 'return" Строка ";' отлично, поскольку std :: string являются конструктивными с c строками. – log0