У меня есть следующий случай:
T* get_somthing(){
std::vector<T> vec; //T is trivally-copyable
//fill vec
T* temp = new T[vec.size()];
memcpy(temp, vec.data(), vec.size() * sizeof(T));
return temp;
}
Я хочу избавиться от процесса копирования, вернув std::vector::data
следующим образом:
T* get_somthing(){
std::vector<T> vec; //T is trivally-copyable
//fill vec
return temp.data();
}
Однако это неверно, поскольку данные будут удалены при вызове vec
деструктора.
Итак, как я могу запретить vec удалять свои данные? Другими словами, я хочу какой-то move-idiiom от std::vector
до С++ Raw Dynamic Array.
P.S. Изменение дизайна не является вариантом. Использование std::vector
обязательно. Возврат pointer
в array
также является обязательным. Becauese Это оболочка между двумя модулями. Один вектор потребности другой указатель потребности.