明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

在程序打開時執(zhí)行函數(shù)

[摘要]有一些應(yīng)用程序需要調(diào)用啟動函數(shù)來分配 main() 函數(shù)開始執(zhí)行時必須提供的資源。一個很好的例子是記錄程序活動的一個日志實(shí)用工具。這個日志服務(wù)必須在 main() 之前開始,這樣它才能記錄程序的開始。   為了保證這樣可行,可以在全局對象的構(gòu)造器中調(diào)用初始化函數(shù)。全局對象概念上是在 main() ...
有一些應(yīng)用程序需要調(diào)用啟動函數(shù)來分配 main() 函數(shù)開始執(zhí)行時必須提供的資源。一個很好的例子是記錄程序活動的一個日志實(shí)用工具。這個日志服務(wù)必須在 main() 之前開始,這樣它才能記錄程序的開始。
  為了保證這樣可行,可以在全局對象的構(gòu)造器中調(diào)用初始化函數(shù)。全局對象概念上是在 main() 開始之前構(gòu)造的。例如:

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

  Init init; // global instance
  int main()
  {
   activity_report* rep=read_log();
   //..
  }
  在 main() 開始執(zhí)行時,init 已經(jīng)構(gòu)造好了。在它的構(gòu)造過程中,它調(diào)用了函數(shù)log_activity()。因此,main() 在開始執(zhí)行時可以安全地立即從日志文件中讀取數(shù)據(jù)。
  這種方法還被標(biāo)準(zhǔn)模板庫(Standard Template Library)廣泛采用。例如,iostream對象cout和cin都是在 main() 之前構(gòu)造的。C++ 如何保證全局對象在 main() 之前構(gòu)造的呢?在大多數(shù)實(shí)現(xiàn)中,內(nèi)核運(yùn)行特殊的啟動代碼,這個特殊的啟動代碼在啟動 main() 之前完成所有的初始化。