shared_ptr 具有给定的类 C 分配和释放函数

shared_ptr with given C-like allocation and deallocation functions

我得到了某个图书馆的 API(确切地说是 nng) 它有一个类似 C 的接口,用于分配和释放消息对象:

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

我正在尝试为该库创建一个 C++ 接口。 我想创建一个 shared_ptr 的 nng_msg 对象,但我正在努力实现。 我如何将分配器和释放器传递给共享对象?

你只需要将分配的指针和自定义删除器传递给std::shared_ptr,例如:

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};
}