EIGEN地图 - 它是否占数据指针的所有权
Eigen Map - does it take ownership of the data pointer?
我正在用Map
类创建一个矩阵:
float* d = new float[rows*cols];
// ... getting data into d
Eigen::Map<Eigen::MatrixXf>(d, rows, cols);
我的问题是 - Map
是否将数据指针的所有权删除并在完成后将其删除?还是它复制数据,我应该在创建地图之后自己释放它?
谢谢。
不,Map
不占有所有权,因此您仍然负责释放内存。实际上,由于几个原因,相反是不可能的:
-
Map
不知道如何分配内存 - 您只能映射分配的缓冲区的子范围
此外,以下非常奇怪:
float *d = new float[10];
// ...
VectorXf v = ...;
v = v + Map<VectorXf>(d,10);
// now d is a dead pointer
没办法!
文档对此非常稀少,但是除此之外,它更常见 删除您未创建的内容,诸如此类的帖子建议您应该应该准备就绪时删除 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
因此,您可以确保您必须删除数据(很好)。
对该文档感到羞耻...
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 如何使用数据对象上的常量指针初始化类
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 将矢量的数据复制到<MyStruct>矢量<MyStruct>的指针
- 使用指针访问数组中的对象数据成员
- CURLOPT_INTERLEAVEFUNCTION回调函数始终接收 nullptr 作为用户数据指针
- C++中纹理数据指针的联合
- 什么是成员数据指针的正确赋值语句
- EIGEN地图 - 它是否占数据指针的所有权
- C 11 STD :: Promise返回STD :: String从线程中返回String,数据指针看起来已复制
- 为什么函数指针和数据指针在 C/C++ 中不兼容
- 带有数据指针的可变模板模板
- 为什么我在尝试将opencv图像数据指针转换为char*时出错
- 通过在CGAL中传递高度、宽度、深度和数据指针来创建Image_3实例
- read() 缓冲区有无效数据(指针问题?
- 在用SWIG编译的c和lua模块之间共享数据指针
- 具有原始数据指针和刻字的对象
- 对openCV的数据指针进行类型转换
- Lua用户数据指针的生存期