C++中拷贝使用的时机:

  1. 使用一个创建完毕的对象来初始化一个新的对象。

    People p1;

    People p2(p1);          //使用了拷贝,赋值了各个值

 

  2.用值传递的方式给函数参数传值

    void visit(People p) {}

    int main

    {

      People p1;

      visit(p1);           //值传递会复制一个object的副本出来,使用了拷贝

    }

  3.以值的方式返回局部对象

    People copy()

    {

      People p1;          //按道理p1是局部变量,出了函数就会被释放。

      return p1;           //根据p1创建一个新的对象,并且返回

    }

    People p = copy();

 

 

  浅拷贝,简单的拷贝操作

  深拷贝,在堆区的重新开辟内存,进行拷贝操作

 

  C++浅拷贝会引起的问题。

  假设类中用 new 创建了堆区内存,并且 object之间进行了赋值操作,会导致在delete——释放内存,时出现重复释放同一块内存空间的问题。

  因此在使用new并且出现对象赋值操作后,应该使用深拷贝。

  例如:

  int *m_Age;

 

  深拷贝:  m_Age = new int(*p.m_Age);    //p是被拷贝的对象