Copy C++ MATLAB Data Arrays
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
and
C
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 an
Array
object are unshared when a write operation is performed. In the
previous example, modifying the variable B
creates a copy of the
CharArray
object with updated data. However, A
and
C
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.