zoukankan      html  css  js  c++  java
  • 148、为什么拷贝构造函数必须传引用不能传值?

    1) 拷贝构造函数的作用就是用来复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实 例。

    2) 参数传递过程到底发生了什么?

    将地址传递和值传递统一起来,归根结底还是传递的是"值"(地址也是值,只不过通过它可以找到另一 个值)!

    i)值传递:

    对于内置数据类型的传递时,直接赋值拷贝给形参(注意形参是函数内局部变量); 对于类类型的传递时,需要首先调用该类的拷贝构造函数来初始化形参(局部对象);

    如void foo(class_type obj_local){}, 如果调用foo(obj); 首先class_type obj_local(obj) ,这样就定义了局 部变量obj_local供函数内部使用

    ii)引用传递:

    无论对内置类型还是类类型,传递引用或指针最终都是传递的地址值!而地址总是指针类型(属于简单 类型), 显然参数传递时,按简单类型的赋值拷贝,而不会有拷贝构造函数的调用(对于类类型).

    上述1) 2)回答了为什么拷贝构造函数使用值传递会产生无限递归调用,内存溢出。

    拷贝构造函数用来初始化一个非引用类类型对象,如果用传值的方式进行传参数,那么构造实参需要调 用拷贝构造函数,而拷贝构造函数需要传递实参,所以会一直递归。

  • 相关阅读:
    c语言|博客作业05
    C语言I博客作业04
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    我的第一周C语言作业
    C语言I博客作业08
    C语言I博客作业07
  • 原文地址:https://www.cnblogs.com/crbhf/p/15037432.html
Copyright © 2011-2022 走看看