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)回答了为什么拷贝构造函数使用值传递会产生无限递归调用,内存溢出。

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

  • 相关阅读:
    js-AOP
    jQueryUI之autocomplete
    nginx安装配置
    oracle结构语法
    ajax/表单提交 多个相同name的处理方法
    ES6模块化
    docker运维
    帆软报表
    oracle锁表
    香港到大陆IPLC节点故障
  • 原文地址:https://www.cnblogs.com/crbhf/p/15037432.html
Copyright © 2011-2022 走看看