我在MsgPack C headers中看到了对'zone‘的引用,但找不到关于它是什么或它是用来做什么的文档。那是什么?此外,C API的逐个函数文档在哪里?
发布于 2012-10-17 16:26:28
msgpack_zone是一个内部结构,用于解包时的内存管理和生命周期。我想说的是,如果您使用unpacking的标准高级接口或替代的streaming版本,您将永远不需要与它交互。
据我所知,没有详细的文档:相反,您应该参考测试套件,该套件提供了方便的代码示例来实现常见任务,例如,请参阅pack_unpack_c.cc和streaming_c.cc。
发布于 2016-02-14 03:55:08
据我所知,它是一种仅限移动的类型,用于存储msgpack::object的实际数据。它很可能是一个实现细节,但实际上有时会泄漏到用户的代码中。例如,任何时候您想要捕获lambda中的msgpack::object,都必须同时捕获msgpack::zone对象。有时你不能使用移动捕获(例如,asio处理程序在某些情况下只接受可复制的处理程序,或者你的编译器不支持该功能)。要解决此问题,您可以:
msgpack::unpacked r;
while (pac_.next(&r)) {
auto msg = result.get();
io_->post([this, msg, z = std::shared_ptr<msgpack::zone>(r.zone().release())]() {
// msg is valid here
}));
}https://stackoverflow.com/questions/12921281
复制相似问题