私はドキュメントのエラーや頭痛からもっと苦しんでいるかどうかわかりません...メンバーにshared_ptrを作成するにはどうすればよいですか?
私がしたいことは、所有権を別のものと共有しますが、そのメンバーを参照するshared_ptrを作成することです。オブジェクト全体ではなくオブジェクトです。単純な例として、出発点... en.cppreference.comから
struct s
{
int a, b;
};
shared_ptr<s> s1 (new s); // pointing to whole object
、コンストラクタ(8)のshared_ptrの、
template< class Y >
shared_ptr(const shared_ptr<Y>& r, T *ptr);
記述が言及は、「rの所有情報を共有するのshared_ptrを構築...であるが、 ptrがr "で管理されているオブジェクトのメンバである典型的な使用例のように、無関係なアンマネージポインタptr ...を保持します。
だから... T
はちょうど間違ってそのコンストラクタのテンプレートから逃しましたか、何か不足していますか?実際、Yもそれが私にとって間違っているように見えます。だから、一般的に、そのコンストラクタは正しく記述されていますか?私は私が行うことができます願っています何
はこのような何か...
shared_ptr<int> s2 (s1, &(s1.get()->a));
s2
ポイントメンバーa
(int
)が、s1
を持つオブジェクト全体の株式の所有権にあります。
これはまともですか?
:あなたが投稿のコードが動作するはずです
、あなたものように、それは少し単純に書くことができますヒープに?つまり、単にs2の生ポインタを使用しないのはなぜですか? –
@RC - 元のshared_ptrの割り当てが解除された場合、オブジェクト自体は、つまりs2がダングリングポインタにならないようにするためです。実世界の例では、s1とs2のスコープは同じではありません。 – Steve314
はい、まったく正気です。また、 '.get()'は必要ありません。 – atzz