zoukankan      html  css  js  c++  java
  • 关于类拷贝造函数

        1默认拷贝构造函数:默认拷贝构造函数是构造函数的重载,它是依据对象来创建对象的,如Student a(b); 表示通过b对象来初始化a,那么这种对象创建活动为拷贝构造函数。如果对象实体是单纯的对象本体时,对象的拷贝构造与变量的拷贝并无两样,但是若对象本体不同于对象实体时,对象的拷贝就有了差别(如指针的拷贝)。如下:

    #include<iostream>
    using namespace std;
    class Student{
    char* pname;
    public:
    Student(char *pname = "NoName"){
    cout<<"成功构造"<<endl;
    this->pname = new char[strlen(pname)+1];
    strcpy(this->pname, pname);
    }
    ~Student(){
    delete[]pname;
    }
    };
    int main(){
    Student a("LiLy");
    Student b(a);
    return 0;
    }

    在默认拷贝构造时,pname指针也复制了,a对象与b对象的pname都指向同一个"Lily",此时在析构时候,"Lily"这块区域被删除2次,于是系统会出错。这是由于a对象本体与实体不一样所导致的。此时需要重写拷贝构造函数覆盖默认拷贝构造函数:

    Student (const Student &s){

         pname=new char[strlen(s.pname)+1];

        strcpy(pname,s,pname);

    }

    自定义的拷贝构造函数也是类名,他是构造函数的重载。拷贝构造函数必须使用对象的常引用。当自定义对象作为参数传递时,能用引用就尽量用引用,能用常量引用的就用常量引用。

  • 相关阅读:
    LINUX中常用操作命令
    NET Core Kestrel部署HTTPS
    Java中Enum枚举的使用
    Java多线程——sychronized
    Java中SynchronizedMap与ConcurrentHashMap的对比
    Java中HashMap实现原理
    数据结构——Java实现单向链表
    数据库——事务基础
    数据结构——Java实现二叉树
    Java中ThreadLocal的深入理解
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5089509.html
Copyright © 2011-2022 走看看