2012-02-21 101 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

相关问题