所以我在我的Main类中有一个shared_ptr,并且我希望其他对象(单例类)可以访问shared_ptr指向的内容。如何指向shared_ptr
在伪代码...
mySingletonInstance->somePointer = myShared_ptr;
我该怎么办呢?
所以我在我的Main类中有一个shared_ptr,并且我希望其他对象(单例类)可以访问shared_ptr指向的内容。如何指向shared_ptr
在伪代码...
mySingletonInstance->somePointer = myShared_ptr;
我该怎么办呢?
如果单例应该参与由shared_ptr持有的对象的共享管理,那么它的somePointer可能只是该shared_ptr的一个副本。否则使用weak_ptr。
如果你不想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
可能拥有它的指针已被删除后,即使对象。
我不认为这是'weak_ptr <>'的改进,因为这提供了取消引用已删除对象的机会。 – ildjarn 2012-02-21 20:29:43
@ildjarn - 这比'weak_ptr <>'的唯一优点是不必调用'weak_ptr :: lock()'。 – 2012-02-21 20:32:12
也许'mySingletonInstance-> somePointer =&(* myShared_ptr)' – 2012-02-21 20:02:09
'weak_ptr'的时间! – ildjarn 2012-02-21 20:02:49
@AshBurlaczenko,但somePointer可以是一个简单的指针,或者它也必须是shared_ptr? – Pier 2012-02-21 20:08:45