C++浅拷贝与深拷贝

浅拷贝:

    两个辅助变量指向同一内存空间,有一个对象obj2把指向的同一内存空间析构掉,而obj1会再一次析构这一内存空间,在这个时候就会发生错误,obj1会指向一个垃圾值,会出现野指针的现象;

    解决此问题的方案为深拷贝

浅拷贝

#include<iostream>

using namespace std;

class test
{
public:
          test(char *myp)
          {
                    int len = strlen(myp);
                    p = (char*)malloc(len + 1);
          }

          ~test()
          {
                    if (p != NULL)
                    {
                              free(p);
                    }
          }

private:
          char *p;

          int len;
};

void objplay()

{
          test obj1("abcd");

          test obj2 = obj1;
}

void main()

{

          objplay();

          system("pause");

}


 

//深拷贝

#include "iostream"

using namespace std;

class Location

{

public:

          Location(char *p)           //一个参数的构造函数

          {

                    m_len = strlen(p);

                    m_p = (char *)malloc(m_len + 1);

                    strcpy(m_p, p);

          }

          Location(const Location &obj)                                //深拷贝   拷贝构造函数  显示编写

          {                                                                                 //如果不显示编写,将会调用默认的拷贝构造函数进行浅拷贝

                    m_len = obj.m_len;

                    m_p = (char *)malloc(m_len + 1);

                    strcpy(m_p, obj.m_p);

          }

          void prinT()

          {

                    cout << m_p << endl;

          }

private:

          char *m_p;

          int m_len;

};

void main()

{

          Location obj1("zhangwentao");

          Location obj2 = obj1;

          obj1.prinT();

          obj2.prinT();

          system("pause");

}

































猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/82023952