对象的创建和销毁过程分析
1、对象的创建过程
①给对象划分内存空间(栈、堆)
②执行初始化列表
-
根据继承表的顺序调用父类的无参构造或有参构造
通过:父类(val)调用父类的有参构造 -
根据成员变量的定义顺序调用类类型成员的无参构造或有参构造
通过:类类型成员名(val)调用类类型成员的有参构造
- 对其他成员初始化
③执行自己的构造函数、可能去申请额外资源
2、对象的销毁过程(创建的逆序)
①执行自己的析构函数、可能去释放资源
②根据类类型成员顺序的逆序,调用他们的析构函数
③根据继承表的顺序,调用父类的析构函数
④释放对象的内存
实例:
#include<iostream>
using namespace std;
class A
{
public:
A(void)
{
cout << "A无参构造" << endl;
}
A(int num)
{
cout << "A的有参构造" << endl;
}
~A(void)
{
cout << "A的析构函数" << endl;
}
};
class B
{
public:
B(void)
{
cout << "B无参构造" << endl;
}
B(int num)
{
cout << "B的有参构造" << endl;
}
~B(void)
{
cout << "B的析构函数" << endl;
}
};
class C
{
public:
C(void)
{
cout << "C无参构造" << endl;
}
C(int num)
{
cout << "C的有参构造" << endl;
}
~C(void)
{
cout << "C的析构函数" << endl;
}
};
class D
{
public:
D(void)
{
cout << "D无参构造" << endl;
}
D(int num)
{
cout << "D的有参构造" << endl;
}
~D(void)
{
cout << "D的析构函数" << endl;
}
};
class E : public B,public A
{
C c;
D d;
public:
E(void)//:A(20),B(20),c(20),d(20)初始化列表,调用有参构造
{
cout << "E无参构造" << endl;
}
~E(void)
{
cout << "E的析构函数" << endl;
}
};
int main(int argc,const char* argv[])
{
E* e = new E; //BACDE
delete e; //先申请的后释放(栈) EDCAB
}
标签:销毁,对象,创建,成员,构造,C++,析构,父类
From: https://www.cnblogs.com/ljf-0804/p/17654984.html