大家都知道,全局对象的生命周期是整个Process,Process终了时系统回收空间,全局对象的构造是在main()函数之前,析构是在main()函数返回后进行的。今天发现在VC6.0和VC2012中是有区别的。

(1)测试代码:

文件a.h,a.cpp,main.h,main.cpp代码如下

#pragma once
class A
{
public:A();~A();
};
#include <iostream>
#include "a.h"A::A()
{std::cout << "A construct.\n";
}
A::~A()
{std::cout << "A deconstruct.\n";
}
#pragma once
class B : public A
{
public:B();~B();
};
//author:chen_jintao
//注意:includeの使い方、順序#include <iostream>
#include "a.h"
#include "main.h"B::B()
{std::cout << "B construct.\n";
}
B::~B()
{std::cout << "B deconstruct.\n";
}B theB;//全局对象定义
void main()
{std::cout << "main() function is over.\n";return;
}

 (2)测试结果:

a)VC6.0中的执行结果:

b)VC2012中执行结果:

(3)结果分析:

从VC6.0的执行结果来看A、B的析构函数没有调用,其实析构函数确实是调用了,这是VC6.0对C++标准库支持的一个bug。这是因为std这个对象在main函数退出后已经释放掉了,所以A、B析构函数的“std::cout<<”没有输出。

大家可以用下面2种方式去确认:
1.直接使用include<iostream.h>代替include<iostream>,调用cout<<。
2.用的C++封装的C的标准库,include<cstdio>或者直接include<stdio.h>,调用printf()。

VC6.0和VC2012的全局对象的释放!!!相关推荐

  1. 亲密接触VC6.0编译器

    亲密接触VC6.0编译器 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在"使用"它,而不会想去"了解" ...

  2. VC6.0 转 VS2005

    AutoPDMS8.0源码使用高版本ObjectARX(2004/2007)编译的总结 以下是引用uesoft在2007-11-21 15:14:29的发言: 原文作者:杨志军,长沙优易软件开发有限公 ...

  3. Node.js 全局对象

    Node.js 全局对象 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 gl ...

  4. NodeJS API Process全局对象

    Process 全局对象,可以在代码中的任何位置访问此对象,使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等 ...

  5. C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配

    一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...

  6. 【转】VC6.0附带小工具软件一览

    工欲善其事,毕先利其器.今吾将VC6.0下的工具小试一遍,略知其功用,以备不时之需.简略作以总结,欲与众人共飨之. VC6.0附带工具软件: (1)ActiveX Control Test Conta ...

  7. 30.Node.js 全局对象

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html 学习要点:  - __filename  - __dirname  - setTim ...

  8. 把随机数对象暴露给window成为全局对象 原型及原型链 原型的指向是否可以改变

    把随机数对象暴露给window成为全局对象 <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  9. (转)DirectShow9在VS2005或vc6.0下编译出现问题的解决方法

    1.我用的版本是DirectX9.0b ,没有安装,直接解压后放到一个文件夹里用 2.我按照以下的步骤操作成功.明天试着做个播放器. VFW(Video for Windows)是Microsoft推 ...

  10. Node.js-json-模块化-全局对象-fs-服务-Buffer

    Node.js-json-模块化-全局对象-fs-服务-Buffer 1 node基础知识点 1.1介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个 ...

最新文章

  1. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
  2. Ubuntu图形界面配置开机自启动
  3. Android AsyncTask源码解读
  4. unity vr 交互_基于手动的VR / MR交互,用于删除实体
  5. KETTLE初学者使用教程
  6. html文件变成巨大,巨大的JavaScript HTML5 blob(从大ArrayBuffers)在客户端构建一个巨大的文件...
  7. AMD将统治2017年的PC及服务器市场?
  8. llq考试 圣诞欢乐赛 (第二发)
  9. 基于Cesium使用自定义着色器的资源总结
  10. 电子与计算机工程陈晟老师,陈晟老师课堂:数学成绩好,这七个大学专业适合报考!...
  11. Linux与TPM2芯片
  12. 数字经济的发展需要包括区块链在内的八大技术的支撑360云储
  13. 如何使用灰灰美国专利下载软件一键下载美国专利
  14. 计算机实践教程采莲趣事,计算机基础作业采莲趣事
  15. 隐写术-PNG文件隐写(一)
  16. 数据库的分组统计查询
  17. 基于密度的聚类算法(3)——DPC详解
  18. 数据分享——EPS数据库-新冠肺炎疫情实时监控平台
  19. 实达集团任命IT业界知名高管叶成辉为总裁(首席执行官)
  20. srt字幕解析(上)

热门文章

  1. STM32F429之DCMI 数字相机接口
  2. Unity3DShader基础(CG)
  3. Android源码下载编译(TI)
  4. 【原创】微信最新表情js代码
  5. 用友打印问题合集 二【各模块】
  6. ctfmon.exe开机无法自己主动启动
  7. android studio trace,天猫Android性能优化1—AndroidStudio内置的Traceview视图
  8. 业界最年轻的领军人物--久其总工程师欧阳曜
  9. php实现图片液化,制冷剂的相态变化及其状态图
  10. HTML5新特性之标签实战应用:超星尔雅平台