zoukankan      html  css  js  c++  java
  • C++拷贝构造函数

    拷贝构造函数是一种特殊的构造函数,其定义为第一个参数为为本类型的一个引用或者是常引用,且无其它参数或者其它参数为默认值,例如下面的函数:

    1     X::X(const X&);          
    2     X::X(X&, int a=1);      
    3     X::X(X&, int a=1, int b=2);  

    那么什么时候调用拷贝构造函数呢?

    1.对象以值传递的形式传入参数

    1 int main()  
    2 {  
    3  CExample test(1);  
    4  //传入对象  
    5  Fun(test);  
    6   
    7  return 0;  
    8 }  

    调用Fun时过程如下:

    (1)test对象传入函数时,创建一个临时变量temp

    (2)调用拷贝构造函数把test的值赋给临时变量,类似于CExample temp(test)

    (3)Fun调用结束后,析构掉temp

    2.对象以值传递的方式从函数返回

    1 CExample Fun()  
    2 {  
    3  CExample object(0);  
    4  return object;  
    5 }  

    当Fun函数执行到return时,步骤如下:

    (1)先产生一个临时变量temp

    (2)调用拷贝构造函数把object赋值给temp,类似于CExample temp(object)

    (3)函数执行到最后先析构掉局部变量object

    (4)Fun执行完后析构掉temp

    关于浅拷贝和深拷贝:

    所谓浅拷贝,指的是在对象复制时,只对对象中的成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就会出问题了。对

    深拷贝的适用范围是对象存在动态成员,在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间,要不然就像浅拷贝一样释放对象时对同一内存空间会释放2次,这是错误的。

  • 相关阅读:
    zhuan:Jmeter基础之---jmeter基础概念
    zhuan:JMeter基础之--元件的作用域与执行顺序
    zhuan:JMeter基础之—录制脚本
    zhuan:一种简单的数据库性能测试方法
    转:使用JMeter创建FTP测试计划
    转:JMeter基础之一 一个简单的性能测试
    性能学习
    [转]JMeter学习(一)工具简单介绍
    后端文件接收resd()和chunk的区别
    PyQt环境安装
  • 原文地址:https://www.cnblogs.com/cocos2014/p/4544225.html
Copyright © 2011-2022 走看看