关于引用作为右操作数出错的有关问题
关于引用作为右操作数出错的问题string& getStr(){string str TESTreturn str}int main(){string st
关于引用作为右操作数出错的问题
string& getStr()
{
string str = "TEST";
return str;
}
int main()
{
string str = getStr(); //ERROR
return 0;
}
求解答为什么会出错?? String C
[解决办法]局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用.
函数体内动态创建的或全局的, 这样返回才有意义.
函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
[解决办法]首先,可以实现,但极度不推荐.
string& getStr()
{
string *pStr = new string("TEST");
return *str;
}
没有任何使用都可以预期 getStr() 内部调用new进行动态分配, 这几乎总是会造成内存不能正确释放.
正常的做法有以下两种: 代码就不写了
1. 返回对象而不返回引用, 这种返回方法往往不可避免的成功首选.
2. 返回 local static 对象的引用. 这种方法可行,但不适用于多线程环境下.