在我的项目中,我编写了以下代码:
Eigen::ArrayXf foo(const Eigen::ArrayXcf &src)
{
auto * output = new float[src.size()];
//Fill the data here
return Eigen::Map<Eigen::ArrayXf>(output, src.size());
}
请注意,在 return 语句中构造的东西是Eigen::Map,但编译器不会抱怨任何东西,因此必须进行转换。因此,我有以下问题:
- 这种转换是如何发生的?通过制作原始数据的深层副本或只是更改所有权?
- 这段代码可以吗?它会导致未定义的行为或内存泄漏吗?
- 如果我希望返回的
Eigen::Array拥有数据*output而不是复制它,并在销毁时释放这块内存,我该如何实现呢?在这里我注意到Eigen::Array并且Eigen::Matrix可以使用原始数据指针进行初始化,但它似乎只适用于固定大小的数组和矩阵。这个函数会被频繁调用,所以我很关心效率。