У меня есть несколько основных вопросов о C ++.Рассмотрим следующий код, в котором я пытаюсь вернуть строку.
const std::string&
NumberHolder::getValueString() {
char valueCharArray[100];
sprintf_s(valueCharArray,"%f",_value);
std::string valueString(valueCharArray);
return valueString;
}
Я пытаюсь вернуть строку со значением члена класса с именем _value.Однако я получаю предупреждение, что пытаюсь вернуть указатель на локальную переменную.Это конечно плохо.Если я достаточно понимаю C ++ на этом этапе, это означает, что к указателю, который я передаю обратно, уже будет вызвано удаление, когда кто-то попытается его использовать.Поэтому я изменяю:
const std::string&
NumberHolder::getValueString() {
char valueCharArray[100];
sprintf_s(valueCharArray,"%f",_value);
std::string valueString = new std::string(valueCharArray);
return (*valueString);
}
Это должно создать указатель на стек, который будет существовать вне этой функции.Здесь есть две проблемы: 1) он все равно не компилируется, и я не понимаю, почему (error = не может преобразовать из 'std :: string *' в 'std :: basic_string <_Elem, _Traits, _Ax>') и 2) Это похоже на потенциальную утечку памяти, потому что я полагаюсь, что кто-то еще вызовет удаление на этом парне.Какой шаблон я должен использовать здесь?