在程序打開時執行函數
發表時間:2024-01-11 來源:明輝站整理相關軟件相關文章人氣:
[摘要]有一些應用程序需要調用啟動函數來分配 main() 函數開始執行時必須提供的資源。一個很好的例子是記錄程序活動的一個日志實用工具。這個日志服務必須在 main() 之前開始,這樣它才能記錄程序的開始。 為了保證這樣可行,可以在全局對象的構造器中調用初始化函數。全局對象概念上是在 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() 之前完成所有的初始化。