我正在使用Map
类创建一个矩阵:
float* d = new float[rows*cols];
// ... getting data into d
Eigen::Map<Eigen::MatrixXf>(d, rows, cols);
我的问题是 - Map
取得数据指针的所有权并在完成后删除它吗?或者它是否复制数据,我应该在创建地图后自己释放它吗?
感谢。
答案 0 :(得分:5)
不,Map
不取得所有权,因此您仍有责任释放内存。实际上,由于以下几个原因,相反的情况是不可能的:
Map
无法知道内存的分配方式此外,以下内容会非常奇怪:
float *d = new float[10];
// ...
VectorXf v = ...;
v = v + Map<VectorXf>(d,10);
// now d is a dead pointer
没办法!
答案 1 :(得分:0)
文档在这方面非常稀少,但除此之外不删除您尚未创建的内容更为常见,this one之类的帖子建议您应该删除 d,当你准备好了。
我建议运行一个像valgrind
这样的内存分析器,它会告诉你如果没有删除指针。
如果您不删除d valgrind
个报告:
400 bytes in 1 blocks are definitely lost in loss record 1 of 1
in operator new[](unsigned long) in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so
1: operator new[](unsigned long) in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so
2: main in test
所以你可以确定你必须删除你的数据(这很好)。
对该文件感到遗憾......