2012-02-21 1 views
1

私はMain_classに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

シングルトンがshared_ptrによって保持されているオブジェクトの共有管理に参加する必要がある場合、somePointerは単にそのshared_ptrのコピーである可能性があります。それ以外の場合は、weak_ptrを使用します。

0

あなたはその後、mySingletonInstance->somePointershared_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()'を呼び出す必要がないことです。 –

関連する問題