2016-05-11 121 views
0

我目前在C++中使用Eigen,并且有一些关于初始化的东西,我无法找到答案。特征从矩阵初始化

是否有可能使用同样大小的另一个动态矩阵初始化动态矩阵:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix) 
} 

上面似乎编译,但我的项目目前充斥着其他的编译错误,所以我不能测试我想确定它在使用之前会做什么。这是否会使destMatrix成为sourceMatrix的深层副本?还是浅拷贝?

它比做任何不同:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix.data()) 
} 

回答

3

它会做一个深拷贝,也sourceMatrix或许应该被声明为const引用。如果你想有一个浅拷贝,那么你必须要求它明确地使用,例如,一个Ref对象:

Ref<MatrixXd> dest(source); 

的更多细节和例子见Eigen::Ref的文档。

+0

谢谢ggael! –