在程序打開時(shí)執(zhí)行函數(shù)
發(fā)表時(shí)間:2024-01-11 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]有一些應(yīng)用程序需要調(diào)用啟動函數(shù)來分配 main() 函數(shù)開始執(zhí)行時(shí)必須提供的資源。一個(gè)很好的例子是記錄程序活動的一個(gè)日志實(shí)用工具。這個(gè)日志服務(wù)必須在 main() 之前開始,這樣它才能記錄程序的開始。 為了保證這樣可行,可以在全局對象的構(gòu)造器中調(diào)用初始化函數(shù)。全局對象概念上是在 main() ...
有一些應(yīng)用程序需要調(diào)用啟動函數(shù)來分配 main() 函數(shù)開始執(zhí)行時(shí)必須提供的資源。一個(gè)很好的例子是記錄程序活動的一個(gè)日志實(shí)用工具。這個(gè)日志服務(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í)行時(shí),init 已經(jīng)構(gòu)造好了。在它的構(gòu)造過程中,它調(diào)用了函數(shù)log_activity()。因此,main() 在開始執(zhí)行時(shí)可以安全地立即從日志文件中讀取數(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)行特殊的啟動代碼,這個(gè)特殊的啟動代碼在啟動 main() 之前完成所有的初始化。