深拷贝 和 浅拷贝

来源:互联网 发布:mysql replace 并发 编辑:程序博客网 时间:2024/05/16 12:55

深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝


浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。

#include <iostream>using namespace std;class CA{ public:  CA(int b,char* cstr)  {   a=b;   str=new char[b];   strcpy(str,cstr);  }  CA(const CA& C)  {   a=C.a;   str=new char[a];  //深拷贝   if(str!=0)    strcpy(str,C.str);  }  void Show()  {   cout<<str<<endl;  }  ~CA()  {   delete str;  } private:  int a;  char *str;};int main(){ CA A(10,"Hello!"); CA B=A; B.Show(); return 0;} 

class Test{public:    int* p;    Test(int value)    {        p = new int(value);    }    ~Test()    {        delete p;    }    void printValue()    {        cout << "The value is " << *p << endl;    }};void func(Test t){    cout << "in the function" << endl;}int main(){    Test t1 = 33;    func(t1);     //没有提供深拷贝函数,运行后会出错    t1.printValue();    return 0;}

class Test{public:    int* p;    Test(int value)    {        p = new int(value);    }    Test(const Test& t)   //深拷贝函数    {        p = new int;        *p = *(t.p);    }    ~Test()    {        delete p;    }    void printValue()    {        cout << "The value is " << *p << endl;    }};void func(Test t){    cout << "in the function" << endl;}int main(){    Test t1 = 33;    func(t1);    t1.printValue();    return 0;}


0 0
原创粉丝点击