2014-03-31 45 views
1

我有一個類A,與成員的陰影:檢測成員變量

std::shared_ptr<class B> m_mySharedPtr; 

我有一個初始化方法:

A::Init() 
{ 
    std::shared_ptr<class B> m_mySharedPtr = m_factory->CreateMySharedPtr(); 
} 

我花了一些時間來實現我的初始化shared_ptr的後是空的。 這是因爲我重新定義成員,作爲本地處理,因此在A :: Init()作用域之外釋放。

我的意思是寫:

A::Init() 
{ 
    m_mySharedPtr = m_factory->CreateMySharedPtr(); 
} 

爲什麼編譯器不抱怨嗎?至少有一個警告? 類似於「成員重新定義」。

它確實在特定情況下有效/有用嗎?

也許我的警告級別太低。

感謝,

文森特

+2

您不重新定義成員,因爲您沒有在函數內定義成員。 –

+3

此外,這個問題不必要地混淆了標題和標籤。它與共享指針無關。 –

+0

我試圖測試某些東西時隱藏了(未重新定義)成員變量,但我總是在其他人看到它之前將其刪除。 –

回答

3

如果你使用GCC或鐺,然後使用-Wshadow標誌。你得到編譯器的輸出是這樣的:

test.cc:5:7: warning: declaration shadows a field of 'A' [-Wshadow] 
       std::shared_ptr<class B> m_mySharedPtr = m_factory->CreateMySharedPtr(); 
             ^
test.cc:2:15: note: previous declaration is here 
     std::shared_ptr<class B> m_mySharedPtr;