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);

    }

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

  • 相关阅读:
    Hibernate执行访问步骤及增删改查
    Tuscany SCA 发布Web Service
    AJAX概述
    WSDL概述与结构
    Android常用的简单代码
    volatile/synchronized
    SOAP概述和结构
    [原]spring学习笔记6.补遗2
    [原]spring学习笔记9.1Spring对Aop的支持AOP基础篇
    [转]转个经典的帖子:说故事学设计模式之Java静态代理模式
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5089509.html
Copyright © 2011-2022 走看看