Copy C++ MATLAB Data Arrays - MATLAB & Simulink (original) (raw)
Main Content
The matlab::data::Array class supports both copy and move semantics. Copies of Array
objects create shared data copies. In the following C++ code, variables B
andC
are copies of matlab::data::CharArray A
; all three variables point to the same data.
#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
supports copy-on-write semantics. Copies of anArray
object are unshared when a write operation is performed. In the previous example, modifying the variable B
creates a copy of theCharArray
object with updated data. However, A
andC
remain shared copies.
// B becomes unshared once modified B[20] = char16_t(33);
C++ MATLABĀ® Data Arrays support move semantics. When you pass a variable using move, there is no copy of the variable.
Avoid Unnecessary Data Copying
If you index into or use an iterator on an array for read-only purposes, then the best practice is to declare the array as const
. Otherwise, the API functions might create a copy of the array in anticipation of a possible copy-on-write operation.