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

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;
}
原文地址:https://www.cnblogs.com/crazycodehzp/p/3336035.html