我有一個工廠類,將用於創建一個特定類的很多實例。創建過程相當混亂,可能需要一段時間。所以我認爲存儲已經在工廠內創建的類的實例是明智的,我可以在以後回憶它們。爲了速度而犧牲const正確性可以嗎?
創建取決於一個參數(名稱),因此事物可以存儲在我稱爲old_instances
的std::map
中。
A A_factory::make_A(std::string const& name)
{
if (old_instances.find(name) != old_instances.end())
{
return old_instances.find(name) -> second;
}
else
{
// obfuscated creation process that creates instance 'new_A'
// ...
old_instances.insert(std::pair<std::string, A>(name, new_A)); // <- problem
return new_A;
}
}
這裏的問題是,這整個例程可能是工廠的const
成員。但是因爲old_instances
已經改編。
我有點覺得尷尬,犧牲const
-這個微不足道的功能。 這些犧牲是合乎邏輯的嗎?
如果這個問題太過依賴品味,請不要拍我。
make'old_instances' mutable – James
看起來您正在重新創建自定義分配器或池存儲。見例如Boost池 – sehe
順便說一下,這就是所謂的**延遲加載**,並且是另一種通常與工廠模式相關的設計模式。 –