簡體   English   中英

使用非靜態成員變量的靜態變量初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM