gpt4 book ai didi

c++ - 添加到重复字段的指针会自动删除吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:57:14 25 4
gpt4 key购买 nike

假设我在 Google Protobuf 中定义了这条消息:

message address
{
String street = 1;
String name = 2;
}

message address_list
{
repeated address addrs = 1;
}

我会将地址添加到已分配的地址列表中:

protobuf::address_list addrs;

for (int i = 1; i < 10; ++i)
{
protobuf::address *addr = addrs.add_addrs();
addr->set_street("foo");
addr->set_name("bar");
}

谁来负责删除用new创建的对象?我知道,如果您使用 set_allocated 函数,除非您调用 release,否则 protobuf 将负责删除,但重复字段情况如何?

最佳答案

不要将 new 与 protobufs 一起使用,这通常不是您想要的。正如所写,您正在泄漏内存。

此外,您的代码将不会像编写的那样编译。这是 the spec for repeated fields ,但简而言之,要在这样的循环中添加元素,您应该使用如下代码:

protobuf::address_list addrs;
for (int i = 1; i < 10; ++i)
{
// This is a non-owning pointer. No delete necessary.
protobuf::address *addr = addrs.add_addr();
addr->set_street("foo");
addr->set_name("bar");
}

关于c++ - 添加到重复字段的指针会自动删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54203361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com