2

私はこのような構造体を持っています:

struct A {
    B b;
    C c;
}

c は b への参照を保持します。私はベクトルにAを保持します:

std::vector<A> as;

新しい要素をベクターにプッシュバックすると、メモリ内で移動する場合があります。これにより、b のアドレスが変更され、c が持つ b への参照が無効になります。b のデータを構造体の外に移動し、それへのポインターを保持するよりも、これを解決するためのより良い方法はありますか?

4

2 に答える 2

0

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;
};
于 2013-08-17T12:36:46.183 に答える