预计a在完成时会被清理GetA(),其在方法中的引用main将无效。
class A
{
public:
std::string str;
void Print()
{
std::cout << str << std::endl;
}
};
A GetA()
{
A a;
a.str = "this is my string";
return a;
}
int main()
{
A a = GetA();
a.Print();
return 1;
}
但结果在控制台中我得到了this is my string.
在此优惠中
a根据对复制构造函数的调用,使用名称创建一个新对象。从函数返回的对象将在句末删除。
在它被复制到新声明的(创建的)对象中之后。
下面的句子正是使用了这个新对象
您的代码中没有任何地方使用有效链接。
要使引用无效,只需
GetA从函数返回对本地对象的引用。在这种情况下,编译器可能会发出警告,指出正在返回对本地对象的引用。