特征映射 - 它是否拥有数据指针的所有权?

Ran*_*Ran 1 c++ eigen

我正在用Map类创建一个Matrix :

float* d = new float[rows*cols];
// ... getting data into d
Eigen::Map<Eigen::MatrixXf>(d, rows, cols);         
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 确实Map取得数据指针的所有权并在完成后将其删除?或者它是否复制数据,我应该在创建地图后自己释放它吗?

谢谢.

gga*_*ael 5

不,Map不取得所有权,所以你仍然有责任释放记忆.实际上,由于以下几个原因,相反的情况是不可能的:

  • Map 不知道内存是如何分配的
  • 您只能映射已分配缓冲区的子范围

而且,以下将是非常奇怪的:

 float *d = new float[10];
 // ...
 VectorXf v = ...;
 v = v + Map<VectorXf>(d,10);
 // now d is a dead pointer
Run Code Online (Sandbox Code Playgroud)

没门!