Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
私はこのような構造体を持っています:
struct A { B b; C c; }
c は b への参照を保持します。私はベクトルにAを保持します:
std::vector<A> as;
新しい要素をベクターにプッシュバックすると、メモリ内で移動する場合があります。これにより、b のアドレスが変更され、c が持つ b への参照が無効になります。b のデータを構造体の外に移動し、それへのポインターを保持するよりも、これを解決するためのより良い方法はありますか?
Bへの正しい参照でCを初期化するAにコピー(c ++ 11で移動)コンストラクターがある場合があります。
編集:サンプルを追加
class B { /*stuff*/}; class C { public: explicit C(B& b) : b(&b) {} private: B* b; }; struct A { A() : b(), c(b) {} A(const A& rhs) : b(rhs.b), c(b) { // Do other needed copy } B b; C c; };