鱼C论坛

 找回密码
 立即注册
查看: 2874|回复: 4

c++中的临时对象 问题

[复制链接]
发表于 2012-7-9 16:57:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5.        
  6. public:
  7.         A();
  8.        
  9.         A(A&b)
  10.         {
  11.                 cout<<"执行拷贝构造函数";
  12.                 n=b.n;
  13.         }
  14.         A(int i)
  15.         {
  16.                 n=i;
  17.                 cout<<"执行构造函数"<<endl;
  18.         }
  19.         ~A();
  20.         void get();
  21.         A operator++()
  22.         {
  23.                 ++n;
  24.                 return A(n);
  25.         }
  26. private:
  27.         int n;
  28. };
  29. A::A()
  30. {
  31.         cout<<"执行构造函数"<<endl;
  32.         n=1;
  33. }
  34. A::~A()
  35. {
  36.         cout<<"执行析构函数"<<endl;
  37. }

  38. void A::get()
  39. {
  40.         cout<<"i:"<<n<<endl;
  41. }
  42. int main ()
  43. {
  44.         A i;
  45.         i.get();
  46.         A m=++i;
  47.         m.get();
  48.         return 0;
  49. }
复制代码
A m 是实例化一个m了吗 是生成一个对象吗? 为什么不用构造函数
A m=++i;到底是怎么实现的  是 A m=num(n)么 那么其中有没有调用临时对象 临时对象又哪里去了呢
现在好乱啊.....
谁能告诉我 什么是临时对象
求大神解答.........................
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-9 19:44:44 | 显示全部楼层
我也才开始学 析构函数这里 还不是太了解:o
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-9 20:29:44 | 显示全部楼层
把 ++i转换成 A类的一个临时对象 然后在赋给 A m 后 临时对象被析构函数 删除掉
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-7-9 21:14:36 | 显示全部楼层
谢谢 我懂了 这里涉及到  NRVO优化的东东 应该是2个类对象 1个临时对象
然后优化成 1个类对象 1个临时对象  
优化过程挺复杂的
NRVO官方解释http://msdn.microsoft.com/zh-cn/library/ms364057(VS.80).aspx (中文)
http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx (英文)
        
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-9 22:55:05 | 显示全部楼层
前++不用临时对象的噢 返回引用即可 而且貌似基本数据类型前++可以做左值 。。。
所以不用返回const  但是我猜想应该是vc6BUG吧
  1.     int i;
  2.     ++i = 0;
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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