Create MATLAB Data Array and Manage Memory from User-Managed Buffer
This example C++ code shows how to use the MATLAB® Data API to create a MATLAB data array (MDA) from an array that has been allocated by a third-party library, without copying the data. It also shows how to control the lifetime of the MDA by using a custom deleter.
To create the MDA, write this function createMDA
. The inputs are
the dimensions of the MDA to create and a pointer to the memory allocated by library
lib
. Assume that the function
get_raw_data_pointer
obtains the underlying raw data pointer from
an array allocated by the library.
To control the lifetime of the array, define a buffer with the data, provide a deleter
(customDeleterFcn
of type buffer_deleter_t
),
then pass the buffer to createArrayFromBuffer
.
#include "MatlabDataArray.hpp" using namespace matlab::data; /* * createMDA: User function to create MATLAB data array (MDA) * input 1: Dimension of the MDA to be created * input 2: Pointer to memory allocated by 3p library "lib" * output: MATLAB data array * get_raw_data_pointer: Library function to get pointer to data * customDeleterFcn: User-created deleter function */ Array createMDA(ArrayDimensions dims, std::shared_ptr<lib::DoubleArray> libArray) { ArrayFactory factory; // Create a buffer (type: buffer_ptr_t) that holds the user data and a custom deleter. buffer_ptr_t<double> customBuffer(libArray.get_raw_data_pointer(), customDeleterFcn); return factory.createArrayFromBuffer(std::move(dims), std::move(customBuffer)); }
For information about the buffer_ptr_t
and
buffer_deleter_t
data types, see MATLAB Data API Types.
For a MEX file example, see Using a custom deleter in a buffer_ptr_t in ArrayFactory::createArrayFromBuffer.