有一些應用程序需要調用啟動函數來分配 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() 之前完成所有的初始化。
|