600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 很多人都不知道的小秘密 c++中拷贝分为两种

很多人都不知道的小秘密 c++中拷贝分为两种

时间:2019-10-29 12:07:37

相关推荐

很多人都不知道的小秘密 c++中拷贝分为两种

深拷贝与浅拷贝

下面为作者的总结以深刻理解深拷贝和甜拷贝

深拷贝:如果创建类对象时,相应的构造函数内用运算符new为对象的数据成员申请内存空间,那么在析构函数中应该用运算符 delete释放相应的内存空间。

当创建对象并用已经存在的对象进行初始化时,必须自定义拷贝构造函数。

在拷贝构造函数内使用new运算符为新对象申请内存空间,把已经存在的对象的内存空间中的数据拷贝到新对象申请的内存空间中,这种拷贝过程即称为深拷贝。

浅拷贝:与深拷贝的概念相对应,不采用上述深拷贝方法实现对象的拷贝即称为浅拷贝。通常情况下,如果类的构造函数内没有用new运算符为对象的数据成员申请内存空间,析构函数中也不用 delete运算符释放内存空间,则不需要自定义拷贝构造函数,使用编译器提供的默认拷贝构造函数即可。

下为深拷贝的代码案例:

#include <iostream>#include <string>#include <cstring>#include <iomanip>#include <array>using namespace std;class student {public:student (const string & = " ", int = 19, double = 0, double = 0, double = 0);student (const student &);~student ();double avgscore();private:string strname;//描述学生姓名int age;//描述学生年龄double *score;//指针,用来储存三门课的成绩};//实现构造函数student::student(const string &name, int nage, double nmath, double neglish, double npe) {strname = name;age = nage;score = new double[3];score[0] = nmath;score[1] = neglish;score[2] = npe;}//实现折构函数student::~student() {delete []score;}student::student(const student &s) {//实现拷贝构造函数strname = s.strname;age = s.age;score = new double [3];//为当前对象score申请内存空间score[0] = s.score[0];score[1] = s.score[1];score[2] = s.score[2];}double student::avgscore() {return (score[0] + score[1] + score[2]) / 3;}int main() {student s1{"janni", 23, 45.5, 78.7, 95.2};cout << s1.avgscore() << endl;student s2{s1};cout << s2.avgscore() << endl;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。