一个很奇怪的问题???

wind2411hawk 2009-06-08 01:13:30
#include<iostream>
using namespace std;
class A
{
public:
int x;
A(int b){x=b;};
};
A& f()
{
A &a(1);//为什么改成 A &a=* new A(1);就对了

return a;
}
int main()
{
A a(2);
a=f();
cout<<a.x;
}
...全文
52 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitwwzhang130 2009-06-08
  • 打赏
  • 举报
回复
返回局部变量是不可取的,看看Effective C++吧
青岛芒果 2009-06-08
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A
{
public:
int x;
A(int b){x=b;};
};
A& f()
{
A &a(1);//为什么改成 A &a=* new A(1);就对了

return a;
}

--其实你想让这句话实现两个事情,第一你创建了一个对象a,然后初始化为1,然后想拿该对象作为引用,作为函数返回值。呵呵,可惜这样是矛盾的,无法实现的。编译器根本不通过的。
chenzhp 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
A& f()
{
A &a(1);//为什么改成 A &a=* new A(1);就对了

return a;
}

不要返回一个局部变量的引用或者指针,否这后果自负。
[/Quote].
lire1213 2009-06-08
  • 打赏
  • 举报
回复
A&是引用一個實際的對象,也就是一個對象的別名;而不會自已在堆上建對象!
  • 打赏
  • 举报
回复
A& f()
{
A &a(1);//为什么改成 A &a=* new A(1);就对了

return a;
}

不要返回一个局部变量的引用或者指针,否这后果自负。
wanyuzhen 2009-06-08
  • 打赏
  • 举报
回复

在C++中,返回值有两种类型,一种是基本类型的,如int,float,存放在寄存器中。
一种是结构体或对象
A &a=* new A(1);在堆上建对象,然后把对象的引用给a
lylm 2009-06-08
  • 打赏
  • 举报
回复
A &a(1);//为什么改成 A &a=* new A(1);就对了

>>没有A &a(1);的用法,也不能返回局部变量引用
>>new A(1)在堆上建了一个对象,a是这个对象的别名,没问题,不过要注意delete释放内存
sun451989 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 wind2411hawk 的帖子:]
#include <iostream>
using namespace std;
class A
{
public:
int x;
A(int b){x=b;};
};
A& f()
{
A &a(1);//
return a;
}
int main()
{
A a(2);
a=f();
cout < <a.x;
}
[/Quote]
new出来的在堆上不会随作用域结束而析构所以A &a=* new A(1);就OK
「已注销」 2009-06-08
  • 打赏
  • 举报
回复
如果一定要用new的话,使用智能指针shared_ptr吧。
Ryanwen 2009-06-08
  • 打赏
  • 举报
回复
A a(1);直接这样就是了,不过这样返回的是局部对象,出了函数就出生命期了
A &a(1);//这样是什么意思
pengzhixi 2009-06-08
  • 打赏
  • 举报
回复
A& f()
{
A &a(1);//为什么改成 A &a=* new A(1);就对了

return a;
}
你怎么可能返回一个局部变量的引用呢.出了这个函数,这个a就被析构了.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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