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};
}
我得到了某个图书馆的 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};
}