2012-11-12 60 views
9

爲了查看weak_ptr是否指向一個有效的對象,創建一個臨時shared_ptr似乎是一種低效率。我甚至不想訪問該對象。這是因爲我有一個函數從shared_ptr的向量返回一個weak_ptr,並且如果它返回一個空的weak_ptr,那麼這意味着該對象不會以該GUID存在。我是否必須使用weak_ptr.lock()來測試它是否指向一個有效的對象?

所以我只是測試一個對象是否存在。

是否有另一種方法檢查weak_ptr是否爲空而不創建shared_ptr?

+0

您可以使用lock() – imreal

+0

您是如何獲得弱指針的?這是必須改變的界面。 –

+1

lock()返回一個shared_ptr,這就是我發佈這篇文章的原因。 – EddieV223

回答

20

您可以使用expired()成員函數。

+1

'use_count'也一樣。 – Pubby

+4

@Pubby:我更喜歡在if(someVecor.size()== 0)上使用'if(someVector.empty())''。同樣的原因在這種情況下,我更喜歡'expired'。更明確 –

+0

我討厭使用Microsoft文檔,除非它是Microsoft特定的功能或問題。更好的是http://en.cppreference.com/w/cpp/memory/weak_ptr/expired –

相關問題