c++ 构造函数

关于构造函数,网上的资料:(http://www.cnblogs.com/BlueTzar/articles/1223313.html)

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化);

在前几天别人代码中,发现了显式调用了构造函数。查了网上的资料(http://bbs.csdn.net/topics/60156685)。

写个代码测试一下:

#include <stdio.h>

class A
{
public:
        A(){m_a=0;printf("A()\n");}
        ~A(){printf("~A(%d)\n", m_a);}
        A(int a)
        {
                m_a = a;
                printf("A(%d)\n", a);
        }
        A(const A& a)
        {
                m_a = a.m_a;
                printf("copyA(%d)\n", a.m_a);
        }
        A& operator=(const A& a)
        {
                m_a = a.m_a;
                printf("oper=(%d)\n", a.m_a);
                return *this;
        }
private:
        int m_a;

};

A  g_a;

A fun_g()
{
        return g_a;
}

A fun(A p)
{
        printf("=====fun\n");
        A a(10);
        printf("=====fun end\n");
        return a;
}

int main()
{
        A a(1), b(2), c;

        printf("=====1\n");
        c = A();
        printf("=====2\n");
        c = A();
        printf("=====3\n");
        A d = fun(a);
        printf("=====4\n");
        A e = d;
        printf("=====5\n");
        A f;
        f = d;
        printf("=====6\n");
        A g = fun_g();
        printf("=====end\n");

        return 0;
}

输出结果:

A()
A(1)
A(2)
A()
=====1
A()
oper=(0)
~A(0)
=====2
A()
oper=(0)
~A(0)
=====3
copyA(1)
=====fun
A(10)
=====fun end   //返回时没调用拷贝构造?
~A(1)
=====4
copyA(10)
=====5
A()
oper=(10)
=====6
copyA(0)
=====end
~A(0)
~A(10)
~A(10)
~A(10)
~A(0)
~A(2)
~A(1)
~A(0)

 

有些疑问待之后确认。

posted on 2013-05-19 21:03  单刀不进  阅读(125)  评论(0编辑  收藏  举报

导航