Класс 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-функции могут создать копию массива в ожидании возможной операции копирования при записи.