0

オブジェクトへのポインターのベクトルがあります。

vector<Foo*> bar;

メソッドで Foo オブジェクトを受け取り、それをベクターに追加する必要があります。これは私の現在の試みです:

void push(const Foo &a){
bar.insert(bar.begin(), a);
}

が参照として渡されたため、これが機能しないことはわかっていますが、に追加するaためのポインタを取得できないようです。abar

aベクトルに追加するにはどうすればよいbarですか?

4

4 に答える 4

4

オブジェクトをポインターのコンテナーに入れることはできません。

オブジェクトを入れたい場合は、オブジェクトのコンテナが必要になります:

vector<Foo> bar;

その場合、すべてのオブジェクトは同じタイプでなければなりません。ifFooが実際には基本クラスであり、さまざまな異なる派生型を格納する必要がある場合は、ポインターを格納する必要があります。

ポインターのコンテナーが必要な場合は、ポインターを入れる必要があります。

bar.insert(bar.begin(), &a);

その場合、オブジェクトの有効期間に注意し、オブジェクトが破棄された後にポインターを使用しないようにする必要があります。スマート ポインターが役立つ場合があります。

于 2012-10-02T04:09:44.613 に答える
1

のアドレスを追加しますa。ポインターは、何かを指す方法であるアドレスを格納します。

bar.insert(bar.begin(), &a);

ポインターを使用する正当な理由があると思いますが、a渡されたものが一時的なものではなく、渡されたオブジェクトがベクトルよりも長く存続することを確認して、ダングリングポインターになってしまわないようにしてください。

于 2012-10-02T04:06:21.793 に答える
0

私が間違っている場合は修正してくださいa。ただし、参照によって渡されますが、そのコードのポインターではありません。& を使用してそのアドレスを取得できるはずですよね?

于 2012-10-02T04:06:31.397 に答える
0

のアドレスを取得するだけですa。参照は実際には単なる参照であるため、そのアドレスを取得すると、実際には参照先のアドレスが得られます。

void push(const Foo& a)
{
    bar.insert(bar.begin(), &(a));
}
于 2012-10-02T04:08:49.380 に答える