7

我在MsgPack C 标头中看到了对“区域”的引用,但找不到关于它是什么或它的用途的文档。它是什么?此外,C API 的函数文档在哪里?

4

2 回答 2

4

msgpack_zone是用于解包时内存管理和生命周期的内部结构。如果您使用标准的高级接口进行解包或替代版本,我会说您永远不必与它交互。

据我所知,没有详细的文档:相反,您应该参考提供方便的代码示例以实现常见任务的测试套件,例如,请参阅pack_unpack_c.ccstreaming_c.cc

于 2012-10-17T08:26:27.610 回答
0

据我所知,它是一种仅移动类型,用于存储 a 的实际数据msgpack::object。它很可能打算成为一个实现细节,但它实际上有时会泄漏到用户的代码中。例如,任何时候你想msgpack::object在 lambda 中捕获 a,你也必须捕获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            
             }));
}
于 2016-02-13T19:55:07.513 回答