如何在C++中分配嵌套的protobuf而不进行复制

How to assign nested protobuf without copying in C++?

本文关键字:protobuf 复制 嵌套 C++ 分配      更新时间:2023-10-16

我有一个protobuf,其中一个字段是另一个protobuf,并且我有后一种类型的实例。如何在不复制的情况下将这个新实例注入另一个protobuf?

我想您正在从这里寻找set_allocated_*

void set_allocated_foo(Bar*Bar(:将Bar对象设置为字段,并释放前一个字段值(如果存在(。如果Bar指针不为NULL,则消息将获得分配的Bar对象的所有权,并且has_foo((将返回true。否则,如果Bar为NULL,则行为与调用clear_foo((相同。

如果您使用的是proto3,编译后的类定义了move构造函数。所以你可以简单地移动它。

协议定义:

syntax="proto3";
message A {
string s = 1;
}
message B {
A a = 1;
}

将A移动到B:

A a;
a.set_s("hello");
B b;
(*b.mutable_a()) = std::move(a);