Main Content

C++ MATLAB データ配列のコピー

matlab::data::Array クラスは、コピー セマンティクスと移動セマンティクスの両方をサポートします。Array オブジェクトのコピーにより、共有データのコピーを作成します。次の C++ コードでは、変数 B と変数 Cmatlab::data::CharArray A のコピーです。3 つすべての変数が、同じデータを指します。

#include "MatlabDataArray.hpp"

int main() {
    using namespace matlab::data;
    ArrayFactory factory;
    CharArray A = factory.createCharArray("This is a char array.");

    // Create a shared copy of A
    CharArray B(A);

    CharArray C = factory.createCharArray("");
    // Copy the contents of A into C
    C = A;

    return 0;
}

Array はコピーオンライト セマンティクスをサポートします。書き込み操作を実行した場合、Array オブジェクトのコピーは共有されません。前の例の変数 B を変更すると、更新されたデータを使用して CharArray オブジェクトのコピーが作成されます。しかし、AC は共有コピーのままです。

   // B becomes unshared once modified
    B[20] = char16_t(33);

C++ MATLAB® データ配列は、移動セマンティクスをサポートします。移動を使用して変数を渡すと、変数のコピーは作成されません。

不要なデータ コピーの回避

読み取り専用の目的で配列にインデックスを付けたり反復子を使用したりする場合、配列を const として宣言することをお勧めします。それ以外の場合、API 関数がコピーオンライト演算の可能性を想定し、配列のコピーを作成することがあります。

参考