オブジェクトへの複数のポインタの使用に関する質問があります。 私はベクトル内のポインタとマップ内のポインタを持っています。 マップはベクトルを使用してオブジェクトのインデックスを作成します。例コード:ベクトル/マップによるオブジェクトへの複数のポインタの使用方法
class Thing
{
public:
int x = 1;
};
Thing obj_Thing;
std::vector<Thing*> v_Things;
v_Things.push_back(&obj_Thing);
std::map<int, Thing*> m_ThingMap;
m_ThingsMap[v_Things[0]->x] = v_Things[0]; // crucial part
このようにポインタを割り当てるのは良い方法ですか?
代わりにベクターやマップにアドレスを保持する必要がありますか?または、私は地図のポインタへのポインタを使用する必要がありますか?
'v_Things(0)'はおそらく 'v_Things [0]'でしょうか?そして 'v_Things.push_back(&obj_Thing);'は非常に危険です。つまらないポインタを簡単に作成する可能性があります( 'obj_Thing'寿命はベクトルとマップよりも早く終了することがあります) – UnholySheep
' Thing * 'を格納する代わりに、オブジェクトがあまりにも早く割り当て解除されないようにするために 'std :: shared_ptr'を代わりに保存してください(そして2つの別々の "物"の間で共有されていることを示すために) –
UnholySheep
v_Thingsのすべてのメンバーが必然的にm_ThingsMapに含まれない場合、私はまだshared_ptrを使用していますか? –