2012-02-21 3 views
1

Итак, у меня есть shared_ptr в моем основном классе, и я хотел бы, чтобы какой-то другой объект (один-одинечный класс) имел доступ к тому, на что указывает shared_ptr.как указать на shared_ptr

В псевдокоде ...

mySingletonInstance->somePointer = myShared_ptr; 

Как я могу это сделать?

+0

Возможно, 'mySingletonInstance-> somePointer = & (* myShared_ptr)' –

+2

Время для 'weak_ptr'! – ildjarn

+0

@AshBurlaczenko, но somePointer может быть простым указателем или он тоже должен быть shared_ptr? – Pier

ответ

4

Если singleton должен участвовать в совместном управлении объектом, который хранится 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

+0

@ildjarn - Единственное преимущество этого над 'weak_ptr <>' не нужно вызывать 'weak_ptr :: lock()'. –

Смежные вопросы