65,184
社区成员




我的理解是:不是说不能,二是说这样做会导致内存泄漏;
string& foo()
{
// new string("abc") 在堆上;
// str 在栈上,str 实际上就是 “abc”,在堆上
string str = new string("abc");
return *str;
}
这有个问题,这里创建了一个堆上的对象,直接返回了堆上内容的引用,但是并没有对其做 delete
这样如果你在外面不 delete 的话,那就完了,这种方式和指针(如下)上一个意思;
string* foo()
{
string* str = new string("abc");
cout << *str;
return str;
}
string foo()
{
string str =string("abc");
return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
string str=foo();
cout<<str<<endl;
getchar();
}
string &foo()
{
string* str = new string("abc");
return *str;
}
int main()
{
string & s1 = foo();
cout << "s1:" << s1 << endl;
delete &s1; //抛开什么编程规范,到这里都没有任何毛病,
string s2 = foo(); //这样用foo()就必定会导致内存泄露
// ...
}