Create MATLAB Data Array and Manage Memory from User-Managed Buffer - MATLAB & Simulink (original) (raw)
Main Content
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 librarylib
. Assume that the functionget_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_ptrlib::DoubleArray libArray) { ArrayFactory factory;
// Create a buffer (type: buffer_ptr_t) that holds the user data and a custom deleter. buffer_ptr_t customBuffer(libArray.get_raw_data_pointer(), customDeleterFcn);
return factory.createArrayFromBuffer(std::move(dims), std::move(customBuffer));
}
For information about the buffer_ptr_t
andbuffer_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.