• 理解复制控制成员和构造函数


    Exmpl.h
    /////////
    #pragma once
    #include<iostream>
    class Exmpl
    {
    public:
    //默认构造函数
    Exmpl(){
    std::cout<<"Exmpl()"<<std::endl;};
    //复制构造函数
    Exmpl(const Exmpl&){
    std::cout<<"复制构造函数 const Exmpl&"<<std::endl;
    }
    //赋值操作符
    Exmpl& operator=(const Exmpl& other){
    std::cout<<"赋值操作符 Exmpl& other"<<std::endl;
    return *this;
    }
    //析构函数
    ~Exmpl(){
    std::cout<<"这里是析构函数~Exmpl()"<<std::endl;
    }
    };
     
    /////////
     
     
    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    #include"Exmpl.h"
    #include"Employee.h"
    using namespace std;
     
    void fun(Exmpl obj){}
    void fun2(Exmpl &obj){}
    Exmpl fun3(){
    Exmpl obj;
    return obj;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    //Exmpl a;//这里调用默认的构造函数创建Exmpl对象a.在return处调用析构函数撤销
    //fun(a);//这里调用复制构造函数,将形参Exmpl对象创建为实参Exmpl对象的副本.fun()函数结束后调用析构函数撤销形参Exmpl对象.
    //fun2(a);//这里形参为引用,不需要调用复制构造函数传递实参,故木有任何显示
    //a=fun3();//这里调用默认构造函数生成一个新的Exmpl对象obj.调用复制构造函数创建返回值为副本的Exmpl对象.在return处又进行了销毁
    //std::vector<Exmpl> evec(3);//调用默认构造函数,创建一个临时值Exmpl对象,然后3次调用复制构造函数,将临时值Exmpl对象复制到vector容器evec的每个元素,然后调用析构函数撤销临时的Exmpl对象,需要撤销3次
    //Exmpl *p = new Exmpl;//调用默认构造函数动态创建Exmpl.因为是指针,所以不会自动析构掉.
    //delete p;//对应到上面的*p,执行析构函数
    return 0;
    }
  • 相关阅读:
    数据结构之链表
    非常好的Java反射例子
    return和finally的执行和联系
    struts2中的OGNL详解
    解耦与耦合的你我他
    struts2案例
    《使用Hibernate开发租房系统》内部测试笔试题
    一对多双向关联关系
    Oracle基本数据类型
    transactionManager的type与dataSource的type
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3336035.html
Copyright © 2020-2023  润新知