在程序启动的时候执行函数

ZDNet软件频道 时间:2003-11-28 作者:ZDNet China |  我要评论()
本文关键词:cpptips
在启动的时候,有一些应用程序需要调用一些日常程序来定位main()启动时必须用到的资源。这在某些时候是非常重要的。下面就让我们来看看如何实现它。
本文译自Builder.com,未经许可请勿转载

在启动的时候,有一些应用程序需要调用一些日常程序来定位main函数启动时必须用到的资源。一个很好的例子是日志工具,它会记录程序的活动情况。这个日志服务必须在main()之前启动,这样它就能够记录main()的启动。要确保上述情况的发生,就要从全局对象的构造函数里调用初始化程序。全局对象要在main()启动之前在概念上被构建好。例如:

class Init
{
public:
  Init()
  {
   log_activity();
  }
};

Init init; // global instance
int main()
{
 activity_report* rep=read_log();
  //..
}

等到main()启动,init就已经被构建好了。在其构建的过程中,它调用了log_activity()函数。因此,main()可以开始执行的时候就立即安全地从日志文件里读取数据。

这项技术也被广泛地用在了标准模板库(Standard Template Library)里。例如,iostream的对象cout和cin都在main()之前被构建。那么C++如何确保全局对象在main()之前被构建了呢?在大多数的实现方式里,核心会运行专门的启动代码,这样的代码会在启动main()之前完成所有的初始化工作。


本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。




责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134