The 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® Массивы поддерживают семантику перемещения. Когда вы передаете переменную, используя move, нет копии переменной.
Если вы индексируете или используете итератор в массиве только для чтения, то лучшая практика состоит в том, чтобы объявить массив следующим const
. В противном случае функции API могут создать копию массива в ожидании возможной операции копирования при записи.