You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从C++ gRPC服务接口访问服务端类的成员变量

问题根因

你代码的核心问题是服务实例混淆:

  • 你在grpcServices::run方法开头修改的test_1、test_2、test_3,都属于调用run方法的当前grpcServices类实例的成员变量
  • 但你在run方法内部又新建了一个局部的bla::grpcServices service对象,你注册到gRPC服务端的是这个全新的局部实例,这个实例的成员变量完全没有经过你前面的初始化修改,对应你拿到的输出:
    • test_1走默认构造是空vector,所以接口里输出size为0
    • test_2是未初始化的野指针,访问时拿到的是内存垃圾值,对应你看到的超大无符号数,严重时会直接触发程序崩溃
    • test_3走了类构造函数的默认初始化逻辑,所以接口里输出size为5,和你的输出完全吻合
修复方案
  1. 删除run方法中局部的bla::grpcServices service实例声明,将注册服务的代码改为注册当前实例:
// 删掉这行 bla::grpcServices service;
builder.RegisterService(this); // 注册当前实例,而不是新建的局部实例
  1. 额外优化建议:
    • 去掉无意义的指针包装,test_2直接声明为std::vector<double>即可,不需要用原始指针,避免内存泄漏和野指针问题
    • 如果后续会有多个gRPC请求并发读写这些共享成员变量,需要加互斥锁保证线程安全,避免数据竞争

内容的提问来源于stack exchange,提问作者Nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:18:02