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)
有些疑问待之后确认。