无法通过 copyin 而不是 set_allocated_something 来设置 protobuf 元素?

No way to set protobuf element by copyin instead of set_allocated_something?

在我生成的 protobuf 类 上,我只看到 set_allocated_something

示例:

syntax = "proto3";
import "uuid.proto";
import "openvpn.proto";
package message;

message VPN {
    UUID uuid = 1;
    oneof vpn {
        OpenVPN openVPN = 2;
    }
}

那么我有:

OpenVPN openVPN;
//fill openVPN
auto vpnAny = someObject.add_vpns();
vpnAny->set_allocated_openvpn(&openVPN);

以下代码崩溃是因为我正在添加一个我拥有数据的对象,然后 set_allocated_openvpn 将首先删除它,然后范围将第二次删除它。

另一种方法是

OpenVPN* openVPN = new OpenVPN();

但我想避免原始指针 + new.

为什么 protobuf 根本不会生成复制数据的方法?为什么我只能传递分配的数据指针?我应该如何处理这种情况?

Protobuf 为每个类型生成复制构造函数和复制赋值运算符。因此,将一条消息复制到另一条消息的最正常方式是

OpenVPN openVPN;
// (...)
*someObject.add_vpns() = openVPN;