读书人

一路笔试题的解读?求讨论

发布时间: 2012-10-21 09:00:07 作者: rapoo

一道笔试题的解读?求讨论~
//应该如何解读?

C/C++ code
class A{    static int objectCount;public:    A()    {        objectCount++;        cout << "A():" << objectCount << endl;    }        A(const A& r)    {        objectCount++;        cout << "A(const A& r):" << objectCount << endl;    }    ~A()    {        objectCount--;        cout << "~A():" << objectCount << endl;    }};int A::objectCount = 0;A f(A x)         //调用默认拷贝构造函数 A(const A& r):2{     cout << endl <<  "Begin: f(A x)" << endl;    return x;   }                //~A():1int main(){    A h;         //A():1    A h2 = f(h); //调用默认拷贝构造函数A(const A& r):2    cout << endl << "End(main): f(A x)" << endl << endl;              return 0;    }               //~A():1  析构h               //~A():0  构函h2

疑问:考虑到临时对象的生成,并且A h2=f(h)是初始化而非赋值,
实际执行的结果为:
A():1
A(const A& r):2
Begin: f(A x)
A(const A& r):3
~A():2
End(main): f(A x)
~A():1
~A():0
对A f(A x)的调用不大理解,求解释讨论(注释部分是我理解的,与实际结果不一致),谢谢!


[解决办法]
把A传递进函数以后是一次Copy,然后析构他,但是返回时也要一份副本,所以就在Copy一次
也就是进去以后Object的值就没有便(加1又减去1)

读书人网 >C++

热点推荐