我遇到了这样的情况:我从一个第三方库得到了一个非常长的数据,它是一个
现在我知道可以获取
下面是我写的一个测试代码,但是它失败了。
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]<<",";
处崩溃。
std::vector::data
能解决问题吗? - NutCrackerstd::move(vec);
这行代码实际上什么也没做。 - Fareanorbind_vector
的目的是什么? - acraig5075