局部变量被回收后不能返回引用,但通过new/malloc等方式在栈上创建的实例可以返回引用。
#include <iostream>
#include <string>
typedef struct m_MyStruct
{
std::string str;
int i;
}MyStruct;
MyStruct& fun()
{
MyStruct m;
m.str = "str";
m.i = 2;
return m;
}
class MyClass
{
public:
MyClass() { std::cout << "+" << std::endl; };
~MyClass() { std::cout << "-" << std::endl; };
std::string str;
int i;
};
MyClass& fun2()
{
MyClass *m = new MyClass();;
m->str = "str";
m->i = 2;
return *m;
}
int main()
{
{
MyClass m = fun2();
std::cout << m.str << " " << m.i << std::endl;
}
{
//MyStruct m = fun(); // error
//std::cout << m.str << " " << m.i << std::endl;
}
getchar();
return 0;
}
/*
+
str 2
-
*/