构造函数相关

1)默认构造函数

如果类中没有定义自己的构造函数,编译器为构造一个默认构造函数,如果自定义了任何一个构造函数,编译器都不会再构造默认构造函数。

默认构造函数分为两种:一种是A(),不带任何参数的默认构造函数。第二种是A(a=1,b=2)带了默认实参的默认构造函数。

2)关于复制构造函数

对象的初始化分为直接初始化使用括号A a(),调用的是相应的构造函数;复制初始化string a="DFAA",调用的是复制构造函数,先生成一个临时string对象,然后复制给a.

复制构造函数使用的地方:同类对象的复制,实参复制传递,函数返回对象值。

对于不支持复制初始化的类或者构造函数为explicit,初始化方式有着本质区别例如:

ifstream file("file_name")//OK,直接初始化,调用构造函数

ifstream file="file_name"//error,复制初始化,但是不支持复制

salse_item item=string("9-9999-999")//如果构造函数为explicit,则初始化失败

默认复制构造函数的行为:将现有对象的每个非static成员复制到新对象的对应成员,包括数组成员

复制构造函数必须定义的类型:类中包含指针数据或者有成员表示在构造函数中分配的其他资源。

复制构造函数也成为拷贝构造函数,拷贝分为浅拷贝和深拷贝

浅拷贝:简单的成员变量复制,不需要对资源重新分配

深拷贝:比如成员变量为指针并且分配了堆空间,那么需要重新释放空间,指定新的空间,则为深拷贝

如果函数禁止拷贝,则可以把复制构造函数声明为private类型。如果声明为private且不定义,那么成员函数以及友元函数都不能调用拷贝构造函数

posted on 2015-06-05 20:43  菜鸟基地  阅读(115)  评论(0)    收藏  举报

导航