标题:[讨论]临时对象的问题
只看楼主
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
 问题点数:0 回复次数:19 
[讨论]临时对象的问题
我又来了...哈哈
这次我想问下,在C++中何时会生成临时对象的问题
比如
class Sample
{
...........
public:
Sample();
Sample(int num);
......
}
比如

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

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

除此之外还有哪些情况下会生成临时对象?洗耳恭听中.......



搜索更多相关主题的帖子: Sample 对象 式调 num 
2006-07-24 16:07
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
得分:0 

当你返回对象的时候,注意不是*this


c++/C + 汇编 = 天下无敌
2006-07-24 16:17
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
得分:0 

和return的原理相同?
也就是说当return返回的不是引用,而是返回普通类型的时候
系统在清理变量前会生成一个值副本用以调用函数的返回

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


2006-07-24 16:28
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
得分:0 
是的,而且又会引起临时对象的析构

c++/C + 汇编 = 天下无敌
2006-07-24 16:33
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
得分:0 
对!!谢谢热情"兄"(你总是"兄"不"兄"的)哈!

2006-07-24 16:36
cz522321
Rank: 1
等 级:禁止访问
威 望:2
帖 子:569
专家分:5
注 册:2006-3-13
得分:0 
还有一种情况如类A和类B,A a=new A(6);这种情况也会产生临时对象

2006-07-24 18:10
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
得分:0 
再接着上面的问题...那是不是函数只要返回的是一个对象,就肯定会调用COPY构造函数生成对象的一个副本???

2006-07-24 23:07
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
得分:0 
这要看情况 例如 CLASS operator +=(CLASS &XX)
{
CLASS.成员变量 += XX.成员变量;
return *this //这个时候不会引起 copy constractor
}

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

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

例如 class x;

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

[此贴子已经被作者于2006-7-24 23:32:16编辑过]


c++/C + 汇编 = 天下无敌
2006-07-24 23:29
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
得分:0 
这个问题你前面已经说过了,返回自己的时候是不会生成临时对象的
恩,我了解了...其他情况的话只要函数返回对象就一定会用COPY CONSTRUCTOR生成临时对象的
是吧?

2006-07-24 23:32
nick_annie
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2005-11-19
得分:0 
又是有些....书上也是这样讲..看到有些最头疼!

2006-07-24 23:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-80027-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013376 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved