2012-02-21 45 views
1

所以我在我的Main類中有一個shared_ptr,並且我希望其他對象(單例類)可以訪問shared_ptr指向的內容。如何指向shared_ptr

在僞代碼...

mySingletonInstance->somePointer = myShared_ptr; 

我該怎麼辦呢?

+0

也許'mySingletonInstance-> somePointer =&(* myShared_ptr)' – 2012-02-21 20:02:09

+2

'weak_ptr'的時間! – ildjarn 2012-02-21 20:02:49

+0

@AshBurlaczenko,但somePointer可以是一個簡單的指針,或者它也必須是shared_ptr? – Pier 2012-02-21 20:08:45

回答

4

如果單例應該參與由shared_ptr持有的對象的共享管理,那麼它的somePointer可能只是該shared_ptr的一個副本。否則使用weak_ptr。

0

如果你不想mySingletonInstance->somePointer尊重shared_ptr所有權的語義,則:

class MySingletonClass { 
    SomeType* somePointer; 
} 
shared_ptr<SomeType> myShared_ptr; 
... 
// Then either of the following lines: 
mySingletonInstance->somePointer = mySharedPtr.get(); 
mySingletonInstance->somePointer = &*mySharedPtr; 

但是當心 - 您somePointer可能擁有它的指針已被刪除後,即使對象。

+0

我不認爲這是'weak_ptr <>'的改進,因爲這提供了取消引用已刪除對象的機會。 – ildjarn 2012-02-21 20:29:43

+0

@ildjarn - 這比'weak_ptr <>'的唯一優點是不必調用'weak_ptr :: lock()'。 – 2012-02-21 20:32:12

相關問題