ドラフトでは次のようなレガシーコードがあります。
// sadly I have to use this structure
struct LegacyStruct {
int* values;
}
LegacyStruct* LgStr;
....
std::vector<int> vec;
// fill vector in some way here
size_t sz = vec.size();
LgStr->values = new int[sz];
std::copy(vec.begin(), vec.end(), &LgStr->values[0]);
vecは巨大になる可能性があるため、int*にコピーしないようにする必要があります。それを行う方法はありますか?私は次のことを試みました:
// type of new operator explained in More Effective C++
LgStr->values = new (&vec[0])int[vec.size()];
OK、values
vec内部配列の先頭を指していますが、vecがスコープ外になると破棄されます。しかし、私はそれを維持する必要があります。
&vec[0] = nullptr; // does not compile of course
したがって、質問は次のとおりです。この場合、移動セマンティクスを適用することは可能ですか?または多分他のトリック?