zoukankan      html  css  js  c++  java
  • 拷贝构造函数的重载

    形式:Class_name(const Class_name & other){};//他接受一个指向类对象的常量应用作为参数。  const关键字的作用是保护other对象中的内容不发生变化。

    1、何时调用拷贝构造函数:

    新建一个对象并将其初始化为同类现有对象时,拷贝构造函数都将被调用。

    StringBad ditto(motto);
    
    StringBad metoo = motto;
    
    StringBad also = StringBad(motto);
    
    StringBad * pStringBad = new StringBad(motto);

    这四种情况下都将调用拷贝构造函数,另外当函数返回一个类对象时,拷贝构造函数也会被调用。当然,当引用参数加了const关键字时,也会调用拷贝构造函数。

    2、默认的拷贝构造函数的功能:

    默认的拷贝构造函数逐个复制非静态成员(成员赋值也称为浅赋值),赋值的是成员的值。

    浅拷贝只是将对象的地址拷贝了,拷贝之后两个对象指向了同一个地址。

    可能出现的问题:通过默认的拷贝构造函数生成的对象,一但析构了其中的一个,另外一个对象的数据就会受损。因为两个对象的地址是一样的,析构其中一个的时候,将会删除数据内容。

    3、定义一个显示拷贝构造函数来解决问题:

    在重载的拷贝构造函数中使用深度复制(deep copy)。拷贝后的对象将在堆上new一块新的内存空间,然后将被拷贝的对象的内容复制给新对象。

    代码实现如下:

    Class_name::Class_name(const Class_name & other){
    
      if(other.str != NULL){
    
            int len = strlen(other.str) + 1;
    
          str = new char[len];
        
            memset(str, 0, len);
    
          std::strcpy(str, other.str);
    
      }
    
    }        
    

      

  • 相关阅读:
    平衡的括号[UVA-673]
    Spark GraphX图形数据分析
    Spark sql
    Spark 分布式计算原理
    spark 算子实例
    window scala-2.11.8 安装
    spark 2.3.3 安装
    安装jdk
    Logstash-6.2.2安装和Kibana-6.2.2安装:
    elasticsearch-6.2.2 安装
  • 原文地址:https://www.cnblogs.com/zhousong918/p/10423623.html
Copyright © 2011-2022 走看看