读书人

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

发布时间: 2013-06-26 14:29:32 作者: rapoo

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

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 对象的引用. 这种方法可行,但不适用于多线程环境下.

读书人网 >C++

热点推荐