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

经过下面primer中的一道习题,能够更深入的了解,析构函数,复制构造函数,赋值操做符重载,默认构造函数的使用。ios

可是个人结果与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"); }

执行结果以下:this

相关文章
相关标签/搜索