1

私は基本的に参照渡しを試みているため、関数によってベクトルに加えられた変更は関数の範囲外で永続的になります。ポインターのベクトルを渡すだけでこれを単独で達成できると考えるのは正しいですか? それは私の頭では完全に理にかなっていますが、ここで何らかの間違いを犯していないことを確認したいだけです.

void updateCursors(vector<cursor*> cursors)

これらのポインターが指すオブジェクトのデータを変更するには、これで十分なはずです。

4

2 に答える 2

2

参照によってベクトルを渡すことができます-

vector<cursor*>& cursors

ただし、ポインターをベクトルに保持するべきではありません。推奨される方法は、コピー可能/移動可能なオブジェクトを保持することです -

vector<cursor>& cursors
于 2012-06-07T14:11:20.017 に答える
1

「これらのポインターが指すオブジェクトのデータを変更するには、これで十分なはずですよね?」
この関数にベクトルを渡すと、コピーが作成されますが (値渡しであるため)、ポインターのベクトルであるYESであるため、オブジェクトへの変更は外部に表示されます。

ただし、冗長なコピーが作成されないように、参照で渡す方がよいでしょう。

void updateCursors(vector<cursor*>& cursors)

また、ネイキッド ポインターの使用に関連した醜いメモリ管理があることにも注意してください。可能であればオブジェクトのベクトルを使用することをお勧めします ( )。または、ポインターを使用する十分な理由がある場合は、(の代わりに)vector<cursor>スマート ポインターを使用することをお勧めします。この質問はあなたを助けることができます: C++ の RAII とスマート ポインターshared_ptr<cursor>cursor*

于 2012-06-07T14:11:08.070 に答える