当我在 Arena 中使用 Protocol Buffer 时,这两个函数有什么区别
google::protobuf::Arena::CreateMaybeMessage<LPD::MyObj>();
还有
google::protobuf::Arena::CreateMessage<LPD::MyObj>();
这已经很晚了,但您问题的答案就在文档中,这里。 Message 的静态“New()”函数使用 null Arena 调用 CreateMaybeMessage 函数。
Message* New(Arena* arena):标准 New() 方法的替代重写。它允许在给定的区域上创建这种类型的新消息对象。如果调用它的具体消息类型是在启用了 arena 分配的情况下生成的,那么它的语义与 Arena::CreateMessage(arena) 相同。如果消息类型不是在启用 arena 分配的情况下生成的,则相当于普通分配,如果 arena 不为 NULL,则后跟 arena->Own(message)。