本文為 C++ Software Design 書的第 37 節,以及 C++ Weekly - Ep 2 Cost of Using Statics 的內容。
class Object
{
static Object& instance()
{
static Object obj;
return obj;
}
Object& obj = instance();
Object& instance_ref()
{
return obj;
}
};
第一種實作方法為標準的 singleton 模式實作,使用的語法是 static local variable,並且在建立此變數時會是 thread-safe。儘管在之後每次呼叫 instance() 時不會再重新生成此變數,但是它總是得先確認此變數是否已經存在,也就是說當 instance() 被呼叫許多次時,每次都會花一點點時間在檢查 obj 是否已經被生成了。在這種情況下,第二種方法就不會有對於 obj 的檢查,因此可以提升效能。影片中的例子是用 valgrind 來 benchmark,其中 instruction 數目差距大約為兩倍。