所有我有一个遗留代码,它在草稿中做了这样的事情:
// 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()];
好的,values
指向 vec 内部数组的开头,但是当 vec 超出范围时它被破坏了。但我必须保持它..
&vec[0] = nullptr; // does not compile of course
所以问题是:在这种情况下是否可以应用移动语义?或者也许是其他一些技巧?