私はMain_classにshared_ptrを持っており、shared_ptrが指しているものへのアクセス権を他のオブジェクト(シングルトンクラス)に与えたいと思います。擬似コードでshared_ptrを指す方法
...
mySingletonInstance->somePointer = myShared_ptr;
私はそれをどのように行うのですか?
私はMain_classに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
@ildjarn - これの 'weak_ptr <>'に対する唯一の利点は 'weak_ptr :: lock()'を呼び出す必要がないことです。 –
おそらく、 'mySingletonInstance-> somePointer =&(* myShared_ptr)' –
'weak_ptr'の時間! – ildjarn
@AshBurlaczenkoしかし、somePointerは単純なポインタでも、それともshared_ptrでなくてはなりませんか? – Pier