如何传递的protobuf的升压:: shared_ptr的函数指针?(How do I pass

2019-09-30 14:48发布

我必须通过boost::shared_ptr

boost::shared_ptr<Protobuf::Person::Profile> pProfile =
      boost::make_shared<Protobuf::Person::Profile>();

这是protobuf的的指针,在protobuf的函数oPerson.set_allocated_profile(pProfile)oPerson.set_allocated()需要一个指向Protobuf::Person::Profile

我曾尝试几种方法,但我认为,当我尝试使用protobuf的对象转换为JSON pbjson::pb2Json这是建立在快速JSON的库函数,指针超出范围,导致段故障。

方法1:

oPerson.set_allocated_profile(pProfile.get());

方法2:

oPerson.set_allocated_profile(&*pProfile);

Answer 1:

方法1和2是等效自的Protobuf消息不超载operator&

protobuf的管理寿命(我认为写入时复制语义)内部,所以我会在整个青睐值语义。

我从来没有完全确定是否(以及如何)所有权与分配的制定者(转移set_allocated_* )。 如果您发现文档它的来源,请告诉我!

IFF set_allocated_profile采取指针的所有权,那么无论你的做法是正确的。 你需要从你拥有共享指针释放指针(请参阅如何释放从boost :: shared_ptr的指针? )。

IFF set_allocated_profile 没有取得所有权,我宁愿写:

oPerson.mutable_profile()->CopyFrom(*pProfile);

或等价:

*oPerson.mutable_profile() = *pProfile;


文章来源: How do I pass protobuf's boost::shared_ptr pointer to function?