深度探討C++靜態(tài)構(gòu)造函數(shù)
主是要一個(gè)類的虛函數(shù)的地址表,這張表解決了繼承、重載的問題,保證其容真實(shí)反應(yīng)實(shí)際的函數(shù),這個(gè)C++靜態(tài)構(gòu)造函數(shù)是屬于類的,而不是屬于哪里實(shí)例的,就是說這個(gè)構(gòu)造函數(shù)只會(huì)被執(zhí)行一次。也就是在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,由.NET自動(dòng)調(diào)用。
在使用靜態(tài)構(gòu)造函數(shù)的時(shí)候應(yīng)該注意幾點(diǎn):
1、靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。因?yàn)槭?NET調(diào)用的,所以像public和private等修飾符就沒有意義了。
2、是在創(chuàng)建第一個(gè)類實(shí)例或任何靜態(tài)成員被引用時(shí),.NET將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類,也就是說我們無法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也就無法控制什么時(shí)候執(zhí)行靜態(tài)構(gòu)造函數(shù)了。
3、一個(gè)類只能有一個(gè)C++靜態(tài)構(gòu)造函數(shù)。
4、無參數(shù)的構(gòu)造函數(shù)可以與C++靜態(tài)構(gòu)造函數(shù)共存。盡管參數(shù)列表相同,但一個(gè)屬于類,一個(gè)屬于實(shí)例,所以不會(huì)沖突。
5、最多只運(yùn)行一次。
6、靜態(tài)構(gòu)造函數(shù)不可以被繼承。
7、如果沒有寫C++靜態(tài)構(gòu)造函數(shù),而類中包含帶有初始值設(shè)定的靜態(tài)成員,那么編譯器會(huì)自動(dòng)生成默認(rèn)的靜態(tài)構(gòu)造函數(shù)。
【編輯推薦】