首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于引用作为右操作数出错的有关问题

2013-06-26 
关于引用作为右操作数出错的问题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对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
[解决办法]
引用:
Quote: 引用:

局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用.
函数体内动态创建的或全局的, 这样返回才有意义.
函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为

明白了,多谢。
另外,请教:函数体内动态创建string怎么实现?

首先,可以实现,但极度不推荐.

string& getStr() 
{     
    string *pStr = new string("TEST");     
    return *str; 
}

没有任何使用都可以预期 getStr() 内部调用new进行动态分配, 这几乎总是会造成内存不能正确释放.

正常的做法有以下两种: 代码就不写了
1. 返回对象而不返回引用, 这种返回方法往往不可避免的成功首选.

2. 返回 local static 对象的引用. 这种方法可行,但不适用于多线程环境下.

热点排行