在下面的示例中,函数fn()
返回对象class A
的副本,在main()
方法中,此副本被分配给class A
类型的引用
class A
{
public:
A() { std::cout << "c'tor\n"; }
A(A const &) { std::cout << "Copy\n"; }
~A() { std::cout << "d'tor\n"; }
};
A fn()
{
A a;
return a;
}
int main()
{
A & a = fn();
}
所以我想了解A & a = fn();
中的main()
是否安全执行?它似乎在Visual Studio上可以编译。如果这是安全的操作,则a
中的main()
实际指向什么,因为返回值是在堆栈上创建的,一旦从fn()
返回,该值应该已经平仓?
谢谢