Я столкнулся с ситуацией, когда я получил std::vector<char>
вывод данных из сторонней библиотеки, это данные очень большой длины, и затем мне нужно преобразовать их в pybind11::array
объект, я не хочу выделить память и сделать memcpy
, это вообще не эффективно.
Теперь я знаю, что могу получить адрес буфера std::vector<char>
, но я не знаю, как освободить владение вектором, чтобы буфер не освобождался при разрушении векторного объекта, интересно, есть ли способ достичь этого.
Я написал тестовый код ниже для проверки, но он не прошел
#include<vector>
#include<iostream>
int *got_vec(int len){// the len in actually scene is decided by the thirdparty lib
std::vector<int> vec;
for(int i =0;i<len;i++){
vec.push_back(i);
}
int *p_vec = &vec[0];
std::move(vec);
return p_vec;
}
int main(int argc,const char **argv){
int len=atoi(argv[1]);
std::cout<<"will go allocate memory size:"<<len<<", before allocation"<<std::endl;
int *p_vec = got_vec(len);
std::cout<<"after allocation, go to print value"<<std::endl;
for(int i = 0; i < len;i++)
std::cout<<p_vec[i]<<",";
std::cout<<std::endl;
delete p_vec;
std::cout<<"deleted"<<std::endl;
}
Программа упала при std::cout<<p_vec[i]<<",";