不要返回 对不在作用域的对象 的引用

孤独de猫 2010-08-18 10:04:27

#include <iostream>

using namespace std;

class SimpleCat
{
public:
SimpleCat(int Age,int Weight);
~SimpleCat(){}
int GetAge(){return ItsAge;}
int GetWeight(){return ItsWeight;}
protected:

private:
int ItsAge;
int ItsWeight;
};

SimpleCat::SimpleCat(int Age,int Weight)
{
ItsAge=Age;
ItsWeight=Weight;

}

SimpleCat &FunctionCat();


int main()
{
SimpleCat &Cat=FunctionCat();
int myAge=Cat.GetAge();

cout << "Cat Age:" <<myAge<< endl;
return 0;
}

SimpleCat &FunctionCat()
{
SimpleCat FriSky(10,8); //这个局部对象,当FunctionCat返回时,会把FriSky删除,那么编译器应该报错的呀??
return FriSky;
}



我用的是CodeBlocks,编译器:GUN GCC
...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
libinfei8848 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 brookmill 的回复:]
借用铁路桥举的一个例子:A去旅馆定个房间,把东西放到房间里,然后打电话把房间号告诉了B,然后就退房了。然后B来到这个房间取东西。这时候结果就不确定了。如果已经有人打扫过房间,东西就没了;如果还没人打扫过,东西就会还在那里。
[/Quote]

好例子
brookmill 2010-08-18
  • 打赏
  • 举报
回复
借用铁路桥举的一个例子:A去旅馆定个房间,把东西放到房间里,然后打电话把房间号告诉了B,然后就退房了。然后B来到这个房间取东西。这时候结果就不确定了。如果已经有人打扫过房间,东西就没了;如果还没人打扫过,东西就会还在那里。
brookmill 2010-08-18
  • 打赏
  • 举报
回复
我用g++编译的时候有一个warning,但是没有error。
这是一个合法不合理的动作,他没有语法错误,只是后果不确定。
编译器会先把FriSky的地址放到返回值的位置(比如eax),然后才删除FriSky,这个从语法上来说是没问题的。只是当时保存的那个地址已经不可靠了。
wing_0706 2010-08-18
  • 打赏
  • 举报
回复
不会报错啊。。 。。 但是很危险。。 得不到你想要的结果。。
liutengfeigo 2010-08-18
  • 打赏
  • 举报
回复
不报错。
但是是编程大忌

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧