[英]Static variable initialization with non static member variable
在我工作的項目中,我在代碼審查過程中看到了如下代碼:
class A
{
shared_ptr<B> instanceB;
}
A::A ()
{
instanceB = make_shared<B>();
static C localVariable(instanceB.get());
}
我知道靜態變量就像全局變量一樣,將在程序啟動時創建,並且在實例化時將創建instanceB。 這可能會崩潰。
在解釋我開始考慮instanceB.get()將返回什么值時。 最可能垃圾對嗎? 當我更多地考慮它時,我相信這個代碼甚至不應該被編譯為什么允許靜態變量在其ctors中采用非靜態參數?
並將在程序啟動時創建
不,那是錯的。 函數中的靜態變量是在第一次執行該函數時創建的。 因此,當A::A()
第一次運行時, localVariable
將接收instanceB.get()
將返回的內容。 因此localVariable
不會有垃圾。
這樣的設計可能看起來確實很奇怪,但它在語法上是正確的,並且對於編譯器具有明確定義的含義。 此外,在經典的單例實現中使用非常類似的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.