Home > OS >  shared_ptr with given C-like allocation and deallocation functions
shared_ptr with given C-like allocation and deallocation functions

Time:03-07

I was given an API for some library (nng to be exact) it has a C-like interface for allocating and deallocating a message object:

int nng_msg_alloc(nng_msg **, size_t);
void nng_msg_free(nng_msg *);

I'm trying to create a C interface for the library. I would like to create a shared_ptr of a nng_msg object, but I'm struggling with the implementation. How do i pass the allocator and deallocator to the shared object?

CodePudding user response:

You only have to pass the allocated pointer and the custom deleter to std::shared_ptr, for example:

std::shared_ptr<nng_msg> new_nng_msg(std::size_t size) {
    nng_msg* ptr;
    auto res = nng_msg_alloc(&ptr, size);

    // example error handling, adjust as appropriate
    if(res != 0)
        throw std::bad_alloc{};

    return {ptr, nng_msg_free};
}
  • Related