Копирование C++ массивы данных MATLAB

matlab::data::Array класс поддерживает и копию и семантику перемещения. Копии Array объекты создают копии разделяемых данных. В следующем Коде С++, переменных B и C копии matlab::data::CharArray A; все три переменные указывают на те же данные.

#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 объект с обновленными данными. Однако A и C останьтесь разделяемые копии.

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

C++ семантика перемещения поддержки MATLAB® Data Arrays. Когда вы передаете переменное перемещение использования, нет никакой копии переменной.

Избегайте ненужного копирования данных

Если вы индексируете в или используете итератор на массиве в целях только для чтения, то лучшая практика состоит в том, чтобы объявить массив как const. В противном случае API-функции могут создать копию массива в ожидании возможной операции копирования при записи.

Смотрите также