最近在寫code時候,發現了關於static變數的一些使用需要注意的地方。具體的情況可以看下面的例子:
aclass.h // 宣告了aclass
class aclass
int data;
aclass.cpp // 定義了乙個static的aclass例項
#include "aclass.h"
static aclass a;
bclass.h // 宣告了bclass
class bclass {
bclass()
data = a.data;
int data;
bclass.h // 定義了bclass的乙個靜態變數
#include "bclass.h"
#include "aclass.h"
static bclass b;
就像以上**上面這樣,在編譯在最終**之後,在呼叫獲得b的時候,並不能保證a此時已經被初始化,所以此時b.data的值是未知的。這裡的問題是因為在乙個static的**裡面呼叫了不被包含(aclass.cpp)初始化過程的static變數,這個變數的初始化在另外的原始檔裡面。
在編譯的時候,這樣的**並不會報錯,但是在執行的時候有一半的機會會出現出現,只有在編譯的最終**裡面,a的初始化**恰巧在foo()的定義前面,這樣才會正常執行。
這個我是參考了這個faq的資料:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12
裡面還有說明解決的方案。
c 學習筆記3
toolstrip工具欄的用法 toolstrip的設定 影象和選單用到的屬性 displaystyle屬性和textimagerelation屬性。displaystyle屬性設定工具欄上每乙個按鈕上顯示影象 顯示文字或者顯示影象和文字,預設是只顯示影象。textimagerelation屬性設定...
C 學習筆記3
陣列 foreach 多維陣列 一次new 鋸齒陣列 陣列的元素是陣列,還得再new子陣列 array類 length arraylist 動態陣列 泛型list 是具有佔位符的,型別安全性,效能優於arraylist dictionary 委託delegate和事件event 或者 用於關聯事件 ...
C 學習筆記 3
new int new int 10 delete p delete p new 和 delete 是關鍵字也是運算子 new 的時候是先得到空間,然後初始化 delete 的時候是先析構,然後收回空間 在動態記憶體分配的時候,程式內部有乙個資料表來記錄你每次申請的記憶體的首位址和大小 delete...