类的构造函数和析构函数的调用顺序(一)

知识点一 关于类的构造函数和析构函数:

1、构造函数不必须与类名相同,不具有类型,不返回任何值。
2、构造函数可以重载、便于用户输入不同类型的参数。
3、默认构造函数为不含任何参数的构造函数,或称为“缺省构造函数”。
4、先构造的后析构,后构造的先析构。
5、在全局范围内定义的对象(所有函数以外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。如果有多个文件中都定义了全局对象,这些对象的构造函数的调用顺序是不确定的。当main函数执行完毕后或者调用exit函数时(此时函数终止),调用析构函数。
6、对象赋值是指同类对象所有数据成员的赋值,不对成员函数赋值(函数只是代码段,不需要也五福赋值)。
7、类的数据成员中不能包括动态分配的数据。
先贴一段代码:

#include "stdafx.h"
#include <iostream>
using namespace std;
class Class1
{
public:
    Class1() :_index(0)
    {
        cout << "Create" << endl;
    }
    Class1(int index) :_index(index)
    {
        cout << "Create" << _index << endl;
    }
    ~Class1()
    {
        cout << "Destroy" << _index << endl;
    }
    Class1& operator=(const Class1& other)
    {
        cout << "operator= from " << other._index << " to " << _index << endl;
        return *this;
    }
    Class1& operator=(Class1&& other)
    {
        cout << "operator=2 from " << other._index << " to " << _index << endl;
        return *this;
    }
private:
    int _index;
};

int _tmain(int argc, _TCHAR* argv[])
{
    {
        Class1 obj;   //1
    }
    {
      Class1 obj1(1);   //2
      Class1 obj2(2);   //3
      Class1 *obj3 = new Class1(3); //4
      obj2 = obj1;      //5
      obj2 = *obj3;     //6
    }
    return 0;
}

运行结果:

Create
Destroy0        //1
Create1         //2
Create2         //3
Create3         //4
operator= from 1 to 2  //5
operator= from 3 to 2
Destroy2
Destroy1           //6

解析1:关于类的构造和析构

{
  Class1 obj;   //1
}

表示该类被构造,在该代码段运行结束,该类被析构;第二段中,先将上述所有的类构造后,在代码段结束时,调用析构函数,顺序为先构造的后析构。
C++:类的构造函数和析构函数

知识点二、拷贝构造函数:
1、拷贝构造函数时一种特殊的构造函数,实现对象的复制。如果用户自己未定义复制构造函数,编译器自己提供一个默认的复制构造函数,其作用是简单的复制类中的每个数据成员,被称为“浅拷贝”,就是对于有指针数据的成员所指向的内存单元的数据是不能被默认拷贝过去的。
2、其形式为:类名 对象一 对象二,如:BOX::BOX(const BOX &b))
3、当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。主要是拷贝指针指向的内存单元的内容。
解析2:拷贝构造函数:

obj2 = obj1;      //5
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值