エイリアス共有ポインタの管理対象オブジェクトを取得しようとしています。私の考えは弱いポインタを使用していた。弱ポインタはオブジェクトを生成しないので、共有ポインタから弱ポインタを作成すると、弱ポインタはエイリアス共有ポインタの格納オブジェクトを忘れて弱ポインタをロックすると、ポインタ。しかし、私が得た結果は私を混乱させます。ウィークポインタは、どの共有ポインタが構築されているかを覚えていますか?エイリアス共有ポインタの管理対象オブジェクトを取得する方法はありますか?スマートポインタの予期しない動作
template<class T> struct Deleter {
void operator()(T* p) const {};
};
Deleter<T> d {};
T t1 {};
T* p1 = &t1;
T t2 {};
T* p2 = &t2;
auto sp1 = std::shared_ptr<T>(p1,d);
auto sp2 = std::shared_ptr<T>(sp1,p2);
auto wp = std::weak_ptr<T>(sp2);
std::cout << sp1.get() << " " << sp2.get() << " " << wp.lock().get() << std::endl;
農産物0x7fff5798c958 0x7fff5798c948 0x7fff5798c948
どうしたのですか?どのような異なる出力を期待していましたか? – Barry
私は '0x7fff5798c958 0x7fff5798c948 0x7fff5798c958'を期待しました –
' shared_ptr'と 'weak_ptr'が期待通りの動作をするのは非常に悪いことでしょう。 'shared_ptr'のエイリアシングはそれほど有用ではありません。 – StoryTeller