#include <iostream>
#include <string.h>
using namespace std;
class A
{
public:
A(){cout<<"<";}
A(A &b){cout<<"#"<<endl;}
~A(){cout<<">";}
};
A c(A &d)
{
A f(d);
return f;//会产生临时对象?临时对象调用一次构造函数
}
int main()
{
A a;
a=c(a);//c(a)会产生一个临时对象,然后用临时对象给a复制,在本句结束时,临时对象析构;
A cc=c(a);//这句为什么比上一句少了一次析构?
cout<<endl;

return 0;

}
上面这段程序在vs2008下执行时a=c(a);调用c()会导致两次构造 两次析构 我知道其中一次构造和析构是函数的局部变量f,剩下的一次构造和一次析构是?是不是说c()函数产生一个临时对象用来存放返回值?而下面那一句A cc=c(a);为什么比上面少了一次析构 

解决方案 »

  1.   

    而下面那一句A cc=c(a);为什么比上面少了一次析构
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~没少吧,也是两次啊。
      

  2.   

    汗 各位麻烦试一下 要是没少的话我就不会发帖子了a=c(a);在执行这句时候,最后会输出两个析构的>证明析构了两次 而执行这句A cc=c(a);在执行下局之前只有输出一次析构时候的>
      

  3.   

    返回值优化,省去一次复制构造
    但各个编译器的行为对此并不统一
    可以看下effective C++,有一节介绍
      

  4.   

    RVO, 这个是编译器做了优化,有些编译器会做这个优化,减少一次构造...
      

  5.   

     hehe  mingbaile  gewei xinku