3

Eigen に移行する C++ の数学計算がいくつかあります。double*以前は、独自の配列を手動でロールgsl_matrixし、GNU Scientific Library からも使用していました。

私を混乱させたのは、 Eigen のFAQ の文言でした。それはどういう意味ですか?何らかの参照カウントと自動メモリ割り当てが行われているということですか?

そして、これが Eigen でも有効であることを確認する必要があります。

// n and m are not known at compile-time
MatrixXd myMatrix(n, m);
MatrixXd *myMatrix2 = new MatrixXd(n, m);

myMatrix.resize(0,0); // destroyed by destructor once out-of-scope
myMatrix2->resize(0,0);
delete myMatrix2;
myMatrix2 = NULL; // deallocated properly
4

1 に答える 1

7

これは有効です。ただし、配列のサイズを に変更しても0MatrixXdオブジェクトに含まれる配列ではなく、オブジェクトが存在することに注意してください。

{
    MatrixXd myMatrix(n, m); // fine
} // out of scope: array and matrix object released.

{
    auto myMatrix = new MatrixXd(n, m); // meh
    delete myMatrix; // both array and matrix object released
}

{
    auto myMatrix = new MatrixXd(n, m); // meh
    myMatrix->resize(0, 0); // array released
} // out of scope: matrix object leaks

new可能な限り、自動保存期間を避けて使用してください。それ以外の場合は、 を使用しますstd::unique_ptr

于 2013-11-03T10:40:44.420 に答える