2012-05-23 103 views
0

可以通過引用從dynamic_pointer_cast獲取返回值還是可以導致問題?通過參考dynamic_pointer_cast獲取shared_ptr

struct A 
{ 
}; 

struct B : public A 
{ 
}; 

int main() 
{ 
    shared_ptr<A> b = make_shared<B>(); 
    auto &a = dynamic_pointer_cast<A>(b); 
    //auto a = dynamic_pointer_cast<A>(b); 

    return 0; 
} 
+0

問題是:你爲什麼要*得到一個參考? –

+0

所以參考計數器不會增加 – Merni

+1

這會破壞使用智能指針的目的,因爲您會引入懸空參考的可能性。 – rubenvb

回答

2

即使可能,它不會做你想要的:

[目的在於]引用計數沒有增加

仍然會增加,因爲dynamic_pointer_cast返回一個新的shared_ptr無論如何。

您的代碼不起作用,因爲引用將被綁定到由dyanamic_pointer_cast返回的臨時對象,並且這是禁止的。

使用const參考將工作(因爲const&允許綁定到一個暫時的),但結果仍然是一樣的:中投將創建一個shared_ptr實例,並增加引用計數。