我有一些关于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