类和对象的六个默认成员函数之拷贝构造与析构函数

类和对象的六个默认成员函数之拷贝构造与析构函数

拷贝构造函数

1.概念 :

只有单个形参,而且该形参是对本类类类型的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时用已经存在的同类型对象进行初始化,由编译器自动调用

举例:
#include <iostream>
using namespace std;

class Date
{
public:
    Date(int y = 1998, int m = 2, int d = 15)
        :year(y)
        ,month(m)
        ,day(d)
    {}

    Date(const Date &d)
        :year(d.year)
        ,month(d.month)
        ,day(d.day)
    {}

    ~Date(){}

private:
    int year;
    int month;
    int day;
};

int main()
{
    Date d1(2008, 2, 15);
    Date d2(d1);
    return 0;
}
运行结果:

这里写图片描述

2. 特征
  • 构造函数的重载,构造函数的性质拷贝构造函数均满足
  • 参数必须是使用类类型对象引用传递参数
  • 如果没有显示定义,系统会自动合成一个默认的拷贝构造函数。默认的拷贝构造函数会一次拷贝数据成员完成初始化
3.应用场景
  • 对象实例化对象
  • 作为函数参数
  • 作为函数返回值

析构函数

1. 概念 :

析构函数 : 与构造函数的作用相反, 在对象被销毁时,由编译器自动调用,完成类的一些资源清理和收尾工作

析构函数的形式 : ~ 类型名称 () { 内容 }

例子 :

#include <iostream>
using namespace std;

class Date
{
public:
    Date(int y = 1998, int m = 2, int d = 15)
        :year(y)
        ,month(m)
        ,day(d)
    {}

    Date(const Date &d)
        :year(d.year)
        ,month(d.month)
        ,day(d.day)
    {}

    ~Date(){
        cout << "析构函数" << this << endl;
    }//析构函数

private:
    int year;
    int month;
    int day;
};

void test()
{
    Date d1(2008, 2, 15);
    return;
}

int main()
{
    test();
    return 0;
}

运行结果
这里写图片描述
在test()函数返回之前下断点, 打开内存监视,输入你所创建的对象的地址(&d1)查看现在d1的内存地址为多少
这里写图片描述
可以看到现在实例化对象d1内存地址现在为0x007CFC10 ,现在让程序继续往下走,打印最后输出结果
这里写图片描述
结果和原来在内存监视的结果一致

2.特性 :
  • 析构函数在类名前加上字符~
  • 析构函数无参数,无返回值
  • 一个类有且只有一个析构函数, 若没有显示定义,系统会自动生成缺省的析构函数

  • 对象生命周期结束时,C++编译器会自动调用析构函数

  • 注意析构函数不是删除对象,只是做一些清理工作

猜你喜欢

转载自blog.csdn.net/liu_zhen_kai/article/details/81269515