У меня есть некоторые основные вопросы о С++. Рассмотрим следующий код, в котором я пытаюсь вернуть строку.
const std::string&
NumberHolder::getValueString() {
char valueCharArray[100];
sprintf_s(valueCharArray,"%f",_value);
std::string valueString(valueCharArray);
return valueString;
}
Я пытаюсь вернуть строку со значением члена класса с именем _value. Однако я получаю предупреждение о том, что я пытаюсь передать указатель на локальную переменную. Это, конечно, плохо. Если я понимаю С++ достаточно на этом этапе, это означает, что указатель, который я передаю, уже будет иметь удаление, вызванное им, к тому времени, когда кто-то попытается его использовать. Поэтому я изменяю:
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) Это похоже на потенциальную утечку памяти, потому что я зависим от кого-то другого, чтобы называть этого парня. Какую модель мне следует использовать здесь?