析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>

通过下面primer中的一道习题,可以更深刻的了解,析构函数,复制构造函数,赋值操作符重载,默认构造函数的使用。

但是我的结果与primer习题解答里面的并不相同,可能是编译器不同的原因导致。

// test1107.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

struct Exam{
    Exam(){ cout<<"Exam()"<<endl;} //默认构造函数
    Exam(const Exam&){ cout<<"Exam(const Exam&)"<<endl;} //复制构造函数
    Exam& operator= (const Exam&){ cout<<"Exam& operator"<<endl;return *this;} //赋值操作符
    ~Exam(){ cout<<"~Exam()"<<endl;}//析构函数
};

void func1(Exam a){}//形参为 exam的对象
void func2(Exam& b){}//形参为 exam的引用
Exam func3(){Exam obj;return obj;} //返回exam的对象


int main(){
    cout<<"--------------------1----------------"<<endl;
    Exam a; //调用默认的构造函数创建对象a
    cout<<"--------------------2----------------"<<endl;
    func1(a);// 调用复制构造函数,创建副本传递实参,撤销副本
    cout<<"--------------------3----------------"<<endl;
    func2(a); //形参为引用,无需传递实参
    cout<<"--------------------4----------------"<<endl;
    a = func3(); //调用默认构造函数创建局部对象,
                //用复制构造函数返回对象副本
                //调用析构函数撤销局部对象
                //调用赋值函数赋值
                //调用析构函数撤销副本
    cout<<"--------------------5----------------"<<endl;
    Exam *b = new Exam(); //调用默认构造函数创建对象
    cout<<"--------------------6----------------"<<endl;
    vector<Exam> exec(3); //调用默认构造函数创建对象
                        //调用赋值构造函数将临时对象复制到每个元素
                        //调用析构函数撤销

                        //重复三次
    cout<<"--------------------7----------------"<<endl;
    delete b; //调用析构,撤销p
    cout<<"--------------------8----------------"<<endl;
    system("pause");
}

执行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值