【发布时间】:2021-12-18 11:19:10
【问题描述】:
这是原型:
message GetIdKeyValueResp {
optional int32 ret = 1;
repeated IpInfo ips = 2;
}
message IpInfo {
optional string ip = 1;
optional string status = 2;
optional uint64 update_time = 3;
optional Disks disks = 4;
}
message DiskHistory {
optional uint64 time = 1;
optional string status = 2;
}
message Disk {
optional uint32 index = 1;
optional string status = 2;
optional uint64 time = 3;
repeated DiskHistory history = 4;
}
message Disks {
optional int32 disk_num = 1;
repeated Disk disk = 2;
}
当我运行代码时
GetIdKeyValueResp resp;
for (int i = 0; i < 10; i++) {
IpInfo* ipinfo = resp.add_ips();
cout << &(ipinfo->disks()) << endl;
}
输出是:
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
0x6424880
显然他们共享了一个地址,所以当我修改其中一个ip的磁盘信息时,其他ip也会被修改。我想知道这是为什么以及如何解决。
【问题讨论】:
-
您还没有添加磁盘,您已经创建了对默认空磁盘记录的引用。磁盘是在修改时创建的(写入时复制)。
-
那我应该如何添加磁盘呢?
标签: c++ protobuf-c