宝马娱乐在线112222 > 网络应用 > 对深拷贝及浅拷贝的理解,拷贝理解

原标题:对深拷贝及浅拷贝的理解,拷贝理解

浏览次数:129 时间:2019-11-13

对深拷贝及浅拷贝的理解,拷贝理解

1.两个拷贝之间主要是用于对象之间的拷贝!

2.区别

没指针:

  深拷贝和浅拷贝没什么区别;

有指针:

  浅拷贝:即对象的默认拷贝函数,只是将指针的地址拷贝给对象,两个变量同时指向一个地址,这样在析构的时候必然会导致程序崩溃;

 1 class A
 2 {
 3 public:
 4     A()
 5     {
 6         m_Data = new char[100];
 7     }
 8     ~A()
 9     {
10         delete []m_Data;
11         m_Data = NULL;
12     }
13 
14 protected:
15 private:
16     char* m_Data;
17 };
18 
19 int _tmain(int argc, _TCHAR* argv[])
20 {
21     A a;
22     A b(a);
23 
24     return 0;
25 

   深拷贝:即要自定义拷贝函数,将指针new一段新内存保存起来;这样析构也不会崩溃;

  

http://www.bkjia.com/cjjc/1142241.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1142241.htmlTechArticle对深拷贝及浅拷贝的理解,拷贝理解 1.两个拷贝之间主要是用于对象之间的拷贝! 2.区别 没指针: 深拷贝和浅拷贝没什么区别; 有指针:...

浅拷贝和深拷贝都是相对拷贝构造函数来讲的

下面代码实现浅拷贝,

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 class A 
 7 {
 8    public :
 9        A(int a=0):m_num(a){};
10        A(const A &arr);
11        int set_num();
12    private:
13      int m_num; 
14 };
15 
16 A::A(const A &arr)
17  {
18      m_num=arr.m_num;    
19  }
20 int A::set_num()
21  {
22     return m_num; 
23  }
24 int main (void)
25 {
26    A arr1(5);
27    A arr2(arr1);
28    cout << "arr1="<<arr1.set_num()<<endl<<"arr2="<<arr2.set_num()<<endl;
29 return 0;
30 }

 再增加一个类成员指针变量,

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 class A 
 7 {
 8    public :
 9        A(int a=0)
10        {
11            cout <<"A"<<endl;
12         m_num=a;
13         m_a=new int[m_num];
14        };
15        A(const A &arr);
16        int set_num();
17        ~A();
18    private:
19      int m_num; 
20      int *m_a; 
21 };
22 
23 A::A(const A &arr)
24  {
25       cout << "&A"<<endl;
26       m_a=arr.m_a;
27      m_num=arr.m_num;    
28  }
29 int A::set_num()
30  {
31     return m_num; 
32  }
33 A::~A()
34 {
35     cout << "~A"<<endl;
36     delete []m_a;
37 }
38 int main (void)
39 {
40    A arr1(5);
41    A arr2(arr1);
42    cout << "arr1="<<arr1.set_num()<<endl<<"arr2="<<arr2.set_num()<<endl;
43 return 0;
44 }

 上面程序拷贝构造函数中把对象的指针地址拷贝给当前对象的指针地址,

本文由宝马娱乐在线112222发布于网络应用,转载请注明出处:对深拷贝及浅拷贝的理解,拷贝理解

关键词:

上一篇:delphi技术专题宝马娱乐在线---获取网卡物理地址

下一篇:宝马娱乐在线C语言中的register关键字,register关键