返回栈中成员变量引用类型的陷阱

来源:互联网 发布:动态宣传图制作软件 编辑:程序博客网 时间:2024/06/05 23:04

当一个类返回成员变量的引用,这种用法很常见,但当这个类在一个栈中被实例化时,就要当心这种用法的陷阱,尤其是一些临时实例的场合

#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却访问了已经被析构了的对象的成员!

原创粉丝点击