您的位置:首页 > 编程语言 > C语言/C++

C++ 浅层复制构造函数

2016-05-16 14:59 225 查看

1. 浅层复制构造函数

          所有的复制构造函数均有一个参数,即对同一个类的对象的引用。
          A(A&a)
          由于需要复制的对象一般不会更改,我们通常将引用定义为常量引用,这样构造函数就不用改变传递进来的对象。
           A(const A&a)
          这样函数就根据对象a来生成一个拷贝。这个a只是形式参数。它代表传递进来的对象。
            
         编译器提供了默认构造函数和析构函数,同样也提供了复制构造函数,编译器提供的默认的复制构造函数只是把传递进来的
        对象的每个成员变量复制到新对象的成员变量中去。然后两个对象中的变量均指向内存放类成员变量的内存区域。假如
        该变量不是指针变量,一般不会出错,假如该变量是指针变量。
       
       


       这样对象a有一个指针成员变量x,它指向存放6的那块内存区域,我们将对象a复制到对象b,如:
        A  b =(a);
        由于要复制对象,因此自动调用默认复制构造函数,调用过程如下图所示。

        首先将对象a作为参数传递到默认复制构造函数,调用过程如下。

         首先将对象a作为参数传递到默认复制函数中,然后将对象a的指针成员变量X复制到对象b中,这样两个对象的指针X现在都指向同一内存区域。
        当这两个对象中的任何一个超出作用域时,都会出现致命错误。比如我们将对象A删除,那么析构函数就会自动释放6的那块内存空间,而对象
    b的指针变量x任然指向该空间,由于该空间已经不存在,那么对象b的指针变量x就变成一个野指针,该程序就处于崩溃的边缘。

        


  

            
      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: