局部对象与全局对象的构造和析构
程序员文章站
2022-03-23 12:09:31
...
例程调试,很多细节问题。可以单步调试后,切入到反汇编进行观察。
#include "pch.h"
#include <iostream>
#include <vector>
#include <ctime>
#include<algorithm>
using namespace std;
namespace _nmsp1 //命名空间
{
//一:局部对象的构造和析构
//主要出了对象的作用于,编译器总会在适当的地方插入调用对象析构函数的代码;
class A
{
public:
A()
{
cout << "A::A()" << endl;
}
~A()
{
cout << "A::~A()" << endl;
}
int m_i;
};
void func()
{
int i;
int j;
//......
/*if (1)
{
return;
}*/
//.......
//....
A obja;//现用现定义 ,对于局部对象,里边的m_i是随机值;
obja.m_i = 10;
int mytest = 1;
if (mytest == 0) //swtich case return;
{
return;
}
int b = 0;
b = 10;
return;
}
}
namespace _nmsp2
{
//二:全局对象的构造和析构
//全局变量是放在数据段里的
//全局对象,在不给初值的情况下,编译器默认会 把全局对象所在内存全部清0;
//全局变量在编译阶段就会把空间分配出来(全局变量的地址在编译期间就确定好的)。
//全局对象构造和析构的步骤:
//a)全局对象g_aobj获得地址(编译时确定好的,内存也是编译时分配好的,内存时运行期间一直存在)
//b)把全局对象g_aobj的内存内容清0的能力(也叫静态初始化)
//c)调用全局对象g_aobj所对应的类A的构造函数
//.....
//d)main()
//{
// //......
//}
//....
//e)调用全局对象g_aobj所对应类A的析构函数
class A
{
public:
A()
{
cout << "A::A()" << endl;
}
~A()
{
cout << "A::~A()" << endl;
}
int m_i;
};
A g_aobj; //全局对象,该全局对象在main函数执行之前就被构造完毕,可以在main函数中直接使用了
//在main函数执行完毕后,才被析构掉的
void func()
{
printf("g_aobj全局对象的地址=%p\n", &g_aobj);
}
}
//main函数开始之前要干很多事,比如全局对象的构建等等。
int main()
{
_nmsp2::g_aobj.m_i = 6;
//_nmsp1::func();
_nmsp2::func();
return 1;
}
//main函数结束之后要干很多事,比如析构函数的执行
上一篇: javascript就是js吗
下一篇: php如何实现确认删除功能