2016-11-23 6 views
2

私のアプローチが正しいかどうかはわかりません。 ベクトルvFunctionへの参照で渡しているので、実行後にベクターの内容が変更されます。C++で参照するローカルstd :: vectorを割り当てる

ベクターvで直接作業できず、テンポラリベクターtempを使用することにした場合はどうすればよいですか? v = tempで一時的にvに割り当てていますか? Functionの実行後に掃引されるいくつかのメモリにvポイントを参照しませんか?

void Function(std::vector<bool> &v) { 
    std::vector<bool> temp(v.size(), false); 

    // some operations on vector temp 
    // ... 

    v = temp; 
} 

答えて

4

Functionの実行後に掃引されるいくつかのメモリでvポイントを参照しませんか?

v = temp;について号、vtempから割り当てられたコピーです。それでvにはtempと同じ内容が含まれますが、それはtempとは関係ありません。 tempローカル変数は後で破棄されますが、引き渡された引数は影​​響を受けません。

ところで:tempは機能から外れると破壊されるローカル変数なので、そこからのコピーは無駄になります。あなたはそれから移動することができます:

v = std::move(temp); 
+0

tempコンパイラが直接範囲外になるので、コンパイラの最適化ではコピーではなく自動的に移動が生成されますか? –

+0

@ A.S.H可能性があります。この種の最適化は、標準によって言及されていません。保証されておらず、移植性がありません。だから、それを信頼できるものにするために、自分でそれをするのが良いです。 – songyuanyao

+0

'Function'の後に' v'を使用しようとすると 'v'が' temp'を指し、 'temp'がもう存在しないので安全ではないはずです。参照の。 –

関連する問題