c++ 学习 -- 复制构造函数

来源:互联网 发布:杭州数据分析培训机构 编辑:程序博客网 时间:2024/05/16 01:24

       复制构造函数是个非常微妙的函数,如果不能深刻理解它,可是会出现很多莫名奇妙的错误,下面通过一个程序来详细的介绍其中的奥妙。

      1 c++中的隐士成员函数

         (1)默认构造函数,如果没有定义

         (2)复制构造函数,如果没有定义

         (3)赋值操作符,如果没有定义

         (4)默认析构函数,如果没有定义

         (5)地址操作符,如果没有定义

     2 重点讲一下复制构造函数

       复制构造函数讲一个对象复制 到一个新建的对象中,也就是说,它用于初始化的过程中,而不是常规的赋值过程中。

        className(const  className &);

     (1)复制构造函数的功能

       逐个复制非静态成员,复制的是值。这就会导致一个问题,在对象中有指针时,只是复制的指针的地址,而没有复制实际的内容,这时,我们必须显示的定义复制构造函数来解决这个问题。

       (2)复制构造函数并没有在构造函数中增加新建对象的个数,但是他却会调用析构函数,这就会导致你在构造函数中的计数不准确。

       (3)就像(1)中提到的,它只是复制了指针的地址,因此,对象调用析构函数的时候,最先调用析构函数的那个对象释放了指针指向的空间,但是当其他对象再次调用析构函数的时候,还会去释放这段空间,这就导致了同一个空间被delete两次,同常表现为乱码。

原创粉丝点击