[C++] 請問如何安排啟動順序 |
尚未結案
|
jackyung
一般會員 發表:22 回覆:46 積分:13 註冊:2004-01-24 發送簡訊給我 |
我寫了一些程式庫,會自動提供一些全域的物件給程式使用,做法是
在模組(*.cpp 檔)中,所有函數之外,加上像以下的程式碼: MyClass *MyObj = new MyClass; 這樣就可以在程式執行 main() 以前先建好 MyObj 物件,可以像 cout、cin.... 直接使用。 但問題是若程式也想要建立其他的全域物件,而這個全域物件也會叫
用 MyObj,要如何確保 MyObj 比這個 全域物件 先被建立。 我知道 BCB 有提供 #pragma startup 可以安排建立全域物件的順序,但這
是 BCB 的功能,有沒有較好的方法可以適用在各平台或編譯器
|
jackyung
一般會員 發表:22 回覆:46 積分:13 註冊:2004-01-24 發送簡訊給我 |
我從高手那學到一個技巧,看以下例子會比較清楚。 TETT.HPP 引入檔 ---------------- // 假設在以下 class 提供兩個函數 class A { int data; public: A(void); ~A(void); int Func1(void); void Func2(int); }; // 取得 class A 的產生的物件 extern A &Aget(void); #define Aobj Aget() TEST.CPP 程式碼 ------------------- int A::Func1(void) { return data; } void A::Func2(int D) { data = D; } // 第一次呼叫會建立 class A 的靜態物件 A &Aget(void) { static A &Obj = &new A; return Obj; } 使用方法如下: Aobj.Func2(2); int d = Aobj.Func1(); 只有在第一次使用 Aobj 會真正建立物件,往後都 使用同一個物件,這樣使用 Aobj 就好像事先已建好了 全域物件一樣,也不擔心建立的順序間題 果然是高手,一出手就讓人嚇一跳發表人 - jackyung 於 2005/02/27 22:44:09 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
jackyung
一般會員 發表:22 回覆:46 積分:13 註冊:2004-01-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |