本征图原始缓冲区

时间:2018-06-22 09:29:37

标签: eigen eigen3 placement-new

请参阅下面的代码:

double* data = new double[100];
boost::shared_ptr<Eigen::VectorXd> rfstdevs = boost::make_shared<Eigen::VectorXd>(
        Eigen::Map<Eigen::RowVectorXd>(data, 1, 100));

我的理解是Eigen将直接使用缓冲区并使用它,所以我应该手动释放数据缓冲区,还是新创建的VectorXd会为我做这件事?

谢谢...

1 个答案:

答案 0 :(得分:1)

这会从中执行深层复制,因此您需要释放data。如果您不需要深层副本,请直接使用Map对象:

Map<RowVectorXd> rfstdevs(data,1,100);

您仍然需要自己删除dataMap不会这样做,因为它不知道它来自哪里。