找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 854|回复: 9

[讨论]临时对象的问题

[复制链接]
发表于 2009-11-3 03:54:06 | 显示全部楼层 |阅读模式 IP:江苏扬州
我又来了...哈哈
这次我想问下,在C++中何时会生成临时对象的问题
比如
class Sample
{
...........
public:
Sample();
Sample(int num);
......
}
比如

Sample sample1;
sample=Sample(1);//显示调用会生成一个临时的对象

Sample sample2;
sample2=1;//隐式调用构造函数也会生成一个临时对象

除此之外还有哪些情况下会生成临时对象?洗耳恭听中.......
发表于 2009-11-3 03:54:07 | 显示全部楼层 IP:江苏扬州
当你返回对象的时候,注意不是*this
回复

使用道具 举报

发表于 2009-11-3 03:54:08 | 显示全部楼层 IP:江苏扬州
和return的原理相同?
也就是说当return返回的不是引用,而是返回普通类型的时候
系统在清理变量前会生成一个值副本用以调用函数的返回

那么也就是说此"临时变量"就相当于这个"副本"?
回复

使用道具 举报

发表于 2009-11-3 03:54:09 | 显示全部楼层 IP:江苏扬州
是的,而且又会引起临时对象的析构
回复

使用道具 举报

发表于 2009-11-3 03:54:10 | 显示全部楼层 IP:江苏扬州
对!!谢谢热情"兄"(你总是"兄"不"兄"的)哈!
回复

使用道具 举报

发表于 2009-11-3 03:54:11 | 显示全部楼层 IP:江苏扬州
还有一种情况如类A和类B,A a=new A(6);这种情况也会产生临时对象
回复

使用道具 举报

发表于 2009-11-3 03:54:12 | 显示全部楼层 IP:江苏扬州
再接着上面的问题...那是不是函数只要返回的是一个对象,就肯定会调用COPY构造函数生成对象的一个副本???
回复

使用道具 举报

发表于 2009-11-3 03:54:14 | 显示全部楼层 IP:江苏扬州
这要看情况 例如 CLASS operator +=(CLASS &XX)
{
CLASS.成员变量 += XX.成员变量;
return *this //这个时候不会引起 copy constractor
}

还有 当你 return CLASS( xxxx) ;//CLASS 是一个类,都不会引起 copy constractor

还有,有些编译器 会对你的代码引起优化,是(返回值命名优化)同样不会引起copy constractor

例如 class x;

//...........
return x;
有些编译器会做出优化,自动在你的函数加上X的引用
回复

使用道具 举报

发表于 2009-11-3 03:54:15 | 显示全部楼层 IP:江苏扬州
这个问题你前面已经说过了,返回自己的时候是不会生成临时对象的
恩,我了解了...其他情况的话只要函数返回对象就一定会用COPY CONSTRUCTOR生成临时对象的
是吧?
回复

使用道具 举报

发表于 2009-11-3 03:54:16 | 显示全部楼层 IP:江苏扬州
又是有些....书上也是这样讲..看到有些最头疼!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:32 , Processed in 0.201482 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表