【发布时间】:2019-12-26 02:17:49
【问题描述】:
在我的项目中,我编写了以下代码:
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中的数据而不是复制它,并在销毁时释放这块内存,我该如何实现?在here,我注意到Eigen::Array和Eigen::Matrix可以用原始数据指针初始化,但它似乎只适用于固定大小的数组和矩阵。这个函数会被频繁调用,所以我很关心效率。
【问题讨论】: