本文主要是介绍返回栈中成员变量引用类型的陷阱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当一个类返回成员变量的引用,这种用法很常见,但当这个类在一个栈中被实例化时,就要当心这种用法的陷阱,尤其是一些临时实例的场合
#include <iostream>
class A
{
public:
int a;
A(int _a) : a(_a) { std::cout << "A::A()" << std::endl;}
~A() { std::cout << "A::~A()" << std::endl; a = 0; }
int & get() { return a; }
};
A foo(void)
{
return A(1);
}
int _tmain(int argc, _TCHAR* argv[])
{
int & a = foo().get();
std::cout << "a = " << a << std::endl;
return 0;
}
如上例,foo()返回一个临时实例,但却保存的这个实例的成员变量的引用,随后的std::cout却访问了已经被析构了的对象的成员!
这篇关于返回栈中成员变量引用类型的陷阱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!