首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

以下的代码安全么,关于返回值的生命周期,该如何处理

2012-02-26 
以下的代码安全么,关于返回值的生命周期classC{public:intffC(){ff10}}staticC*aCfunc(){Ctreturnt

以下的代码安全么,关于返回值的生命周期
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居然只是扔出一个警告了事……
[解决办法]
一般认为:

> > 临时对象的作用域仅仅是该对象产生的表达式,
> > 越过此表达式临时对象则被销毁,
> > 如果在运行时引用该临时对象,
> > 则会发生运行时刻异常。

热点排行