我有一些關於C++的基本問題。考慮下面的代碼,我試圖返回一個字符串。另一個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)這似乎是一個潛在的內存泄漏,因爲我要依靠別人來調用這個人的刪除。我應該在這裏使用什麼樣的模式?
這不是關於返回一個字符串;這是關於返回一個參考。一個懸而未決的參考。 – 2010-07-19 15:51:25
除了你的參考問題..爲什麼const反正呢? – 2010-07-19 15:54:03
std :: string valueString = new std :: string(valueCharArray); return(* valueString); 您忘記了valueString指針,這就是爲什麼不編譯: std :: string * valueString = new std :: string(valueCharArray); – Fanatic23 2010-07-19 15:56:44