以下的代码安全么,关于返回值的生命周期
class C
{
public:
int ff;
C()
{
ff = 10;
}
};
static C* a;
C func()
{
C t;
return t;
};
void test()
{
a = &func();
};
int _tmain(int argc, _TCHAR* argv[])
{
test();
C t = *a;
return 0;
}
[解决办法]
C func()
{
C t; //在这里创建 出了函数就销毁了
return t;
};
[解决办法]
楼上兄弟,你指出的地方并不是问题所在……
[解决办法]
安全。
return t;
会返回t的一个拷贝.
但是如果有动态分配的类成员函数,通常需要自己实现一个拷贝构造函数。
[解决办法]
a = &func();
这一句才是问题,严格的编译器不应该允许这一句通过。
不过那VC 7.1居然只是扔出一个警告了事……
[解决办法]
一般认为:
> > 临时对象的作用域仅仅是该对象产生的表达式,
> > 越过此表达式临时对象则被销毁,
> > 如果在运行时引用该临时对象,
> > 则会发生运行时刻异常。