构造函数的分类及调用
Posted fei102461
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数的分类及调用相关的知识,希望对你有一定的参考价值。
构造函数可以使用两种方式进行分类:
按参数分为:无参构造和有参构造
按类型分为:普通构造和拷贝构造
class Person { public: //无参构造(也可称为默认构造) Person() { cout << "Person的无参构造" << endl; } //有参构造 Person(int a) { age = a; cout << "Person的有参构造" << endl; } //拷贝构造函数 Person(const Person &p) { //将传入的人的属性全部拷贝到我的属性 age = p.age; cout << "Person的拷贝构造" << endl; } int age; };
构造函数的调用有三种方法:
1:括号法
Person p1;//默认构造函数的调用 Person p2(10);//有参构造函数的调用 Person p3(p2);//拷贝构造函数的调用
注意事项:调用默认构造函数是不要加(),加上小括号后编译器会这是认为一个函数的声明。
2:显示法
Person p1;//默认构造函数的调用 Person p2=Person(10);//有参构造函数的调用 Person p3=Person(p2);//拷贝构造函数的调用
Person(10);为匿名对象,特点:当前执行结束后,系统会立刻回收匿名对象。
注意事项:不要用拷贝构造函数初始化匿名对象
3:隐式转换法
Person p2=10;//相当于 写了 Person p2=Person(10) 有参构造函数的调用 Person p3=p2;//拷贝构造函数的调用
拷贝构造函数的调用时机:
1.使用一个已经创建完的对象来初始化一个新对象
Person p1(10); Person p2(p1);
2.值传递的方式给函数参数传值
3.以值方式返回局部对象
深拷贝和浅拷贝的问题:
浅拷贝:常见的赋值拷贝操作
如果用编译器提供的拷贝构造函数,会做浅拷贝操作。浅拷贝带来的问题是堆区的内存重复释放。
深拷贝:在堆区间重新申请空间,进行拷贝操作
以上是关于构造函数的分类及调用的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )(代码片