我有一個類,它包含一個靜態成員,一個字符串映射到函數指針。該映射旨在用一組靜態映射填充一次,並且不會隨後進行修改。強制靜態成員初始化
我的問題是,如何確保地圖在初始化之前不被訪問?我的代碼目前看起來是這樣的:
class MyClass
{
static MapType s_myMap;
public:
static const MapType& getTheMap()
{
if (s_myMap.empty())
{
// Populate the map
}
return s_myMap;
}
};
,工作正常進行的MyClass
外部客戶,但並不妨礙內部類成員直接訪問private
地圖已經初始化之前。
爲了解決這個問題,我想製作地圖本地的getter方法的:
class MyClass
{
public:
static const MapType& getTheMap()
{
static MapType s_myMap;
if (s_myMap.empty())
{
// Populate the map
}
return s_myMap;
}
};
這是一個好主意,或者是有實現這一目標的一個更好的辦法?
將靜態移動到函數是一個好主意。只要沒有其他的靜態對象初始化調用'getTheMap',你就沒事。 –
地圖是否動態初始化?如果沒有,你可以將它填充到初始化程序中(假設你有最近的編譯器)。 –
@KerrekSB它是靜態初始化的。爲了檢查我已經理解了你,你是否建議將'//填充地圖'所隱含的代碼移動到一個單獨的初始化方法(例如'initialiseMap()'),然後通過'MapType MyClass :: s_myMap = initialiseMap()'? – atkins