Effective C 總是初始化

2021-09-28 15:58:43 字數 1459 閱讀 5191

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新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...