私はいくつかのコードをC++ 11-ingしています。私は私が今考えそうでない場合は、所有権とrawポインタにunique_ptrを使用しますか?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
を持ってもX * s「のVb_xと」の私のクラスB
内部で指されているオブジェクトへのX * sの「va_x」の私のクラスの内側の点スマートポインタを使うのが好きです。私にとって、だから私はB内のX用のunique_ptrをを使用する必要があります
(特に私のAのインスタンスがBに属しているため)、クラスBは、X *が指すオブジェクトの所有権を有していることが明らかと思わ:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
私の質問は、クラスAで何をすべきですか?私は生のポインタを保持する必要がありますか?そうすることによって、私のユニットテストでは、私は(それがポイントではないですが、カプセル化の心配はありません)例えば、それは厄介なもの(IMO)につながることを認めなければならない:
unique_ptr<X> x(new X());
A a;
a.va_x.push_back(&(*x)); //awkward, but what else can I do?
A.vb_a.push_back(a); //ok
B.vb_x.push_back(move(x)); //ok
C++ 11に関する今後の質問については、C++でタグ付けしてください。 :) – Xeo
以前に事実上同じ質問をしていませんでしたか? – Puppy
@DeadMGまあ、以前のものもunique_ptrについてですが、これは私が考えると同じではありません –