本文共 853 字,大约阅读时间需要 2 分钟。
类的初始化即为构造函数,也称为隐式的初始化。构造函数在对象初始化时自动被调用,是一种隐式的调用。
构造函数主要分为三种:有参构造函数、无参构造函数和拷贝构造函数。有参构造函数的调用方式有括号法、等号法和手工法三种。
析构函数(destructor)与构造函数相反,当对象脱离其所在的函数(例如对象所在的函数已调用完毕)时,系统会自动执行析构函数。析构函数的主要作用是进行“清理善后”工作,例如在动态内存分配时,通过析构函数释放内存。
在主函数结束时,对象 stud1 和 stud2 会被“清理”,而清理的过程通过调用析构函数实现。
拷贝构造函数是一种特殊的构造函数,用于基于同一类的其他对象的构建及初始化。其形参必须是引用,通常加上 const 约束。拷贝构造函数的主要应用场景包括对象的值传递和返回。
当我们没有编写拷贝构造函数时,C++ 编译器会默认提供一个拷贝构造函数,执行浅拷贝操作。
通过 = 运算符进行对象初始化
当对象通过 = 运算符进行初始化时,会调用拷贝构造函数,执行浅拷贝操作。通过 拷贝构造函数符号()直接调用
当使用 拷贝构造函数符号()直接初始化对象时,也会执行浅拷贝操作。对象以值传递方式传入函数参数
当函数参数是对象时,会自动调用拷贝构造函数进行浅拷贝操作。对象以值传递方式从函数返回
当函数返回对象时,会执行拷贝构造函数进行浅拷贝操作。在某些情况下,类内成员变量需要动态开辟内存。如果采用浅拷贝(即 A = B),则对象 A 和 B 共享同一块内存。如果 B 中有一个成员变量指针已经申请了内存,那么 A 中的那个成员变量也会指向同一块内存。这种情况下,当 B 的内存被释放时,A 的内存会变成野指针,可能导致程序运行错误。
深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程时,资源重新分配,这个过程就是深拷贝;而没有重新分配资源,就是浅拷贝。
转载地址:http://avpfk.baihongyu.com/