author:
問題:這部分是不保證被初始化。要想完全記住那些初始化了,哪些沒有是很困難的。
解決:在使用前都初始化
c++中成員變數的初始化發生在建構函式之前
最好總是會用初始化列表來初始化,可以避免初始化後再賦值
引數化列表的初始化順序,是按照類裡面宣告順序執行的abentry::abentry(const std::string& name, const std::string& address, const std::list& phones)
: thename(name), theaddress(address), thephones(phones), numtimesconsulted(0)
{}
如果有很多建構函式,那麼都寫初始化列表可能會很繁瑣。那麼可以把賦值和初始化開銷不大的一部分內容寫道乙個private函式中執行。可以節約**量
global物件
定義於namespace、class內、函式內和file作用域內被宣告為static的物件。
函式內的static物件為local static其他的為non-local static
問題:如果b檔案呼叫了a檔案中定義的static物件。但是a檔案的static物件還沒有初始化好。就會出現問題。編譯器是不保證這個順序的。
解決:每個static物件使用乙個函式包裹起來。返回物件的引用
多執行緒單例class filesystem
;filesystem& tfs()
class directory
;directory::directory( params )
directory& tempdir()
#include #include #include using namespace std;
mutex mu;//執行緒互斥物件
class singleton_hungry
static singleton_hungry* singleton;
public:
static singleton_hungry* getinstace()
};//靜態屬性類外初始化
singleton_hungry* singleton_hungry::singleton = new singleton_hungry;
class singleton_lazy
static singleton_lazy* singleton;
public:
static singleton_lazy* getinstance()
mu.unlock();//開啟鎖
}return singleton;
}};singleton_lazy* singleton_lazy::singleton = null;
Effective C 使用建構函式初始化語句
在寫程式的時候,往往會出現為乙個型別提供不同場景的建構函式,可能大多建構函式比較相似,而 c 中又不允許預設引數,因此建構函式的編寫無疑是乙個重複工作。但是使用 copy 和paste 來完成建構函式的編寫,有時候很難達到統一,尤其是當成員發生變化的時候。因此比較常見的替換方法就是為建構函式提供乙個...
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...