gpt4 book ai didi

c++ - 在 protobuf 对象上调用析构函数

转载 作者:行者123 更新时间:2023-11-30 03:51:14 26 4
gpt4 key购买 nike

我实现了两个简单的 protobuf 消息

package TestNamespace;
message Object1 {
int32 age = 1;
int32 speed = 2;
}

message Object2 {
Object1 obj = 1;
int32 page_number = 2;
}

然后我有两个 protobuf 对象的包装器类。在 Object2Wrapper 内部,在我调用 ToProtobuf 后,当它返回时,由于某种我无法理解的原因在 obj1 上调用了析构函数。

class Object1Wrapper
{
public:
int32_t Age{};
int32_t Speed{};

void ToProtobuf(TestNamespace::Object1 obj1)
{
obj1.set_age(Age);
obj1.set_speed(Speed);
//After this line the ~destructor is called on obj1
}
};

class Object2Wrapper{

public:
Object1Wrapper obj1{};
int32_t page_number{};

void ToProtobuf(TestNamespace::Object2 obj2Param)
{
TestNamespace::Object1 * obj1Proto = obj2Param.mutable_obj();
obj1::ToProtobuf(*obj1Proto);
// Do stuff.... but obj1Proto is empty
}
};

最佳答案

原因是您按值传递了对象obj1。创建参数的拷贝,并在函数返回时销毁此拷贝。\

我猜你真正想做的是通过引用传递对象。 IE。

void ToProtobuf(TestNamespace::Object1& obj1)
{
obj1.set_age(Age);
obj1.set_speed(Speed);
//After this line the ~destructor is called on obj1
}

只有当你通过引用传递时,你才能改变函数内部的对象。正如您现在所做的那样,函数内部对 obj1 的任何更改对传递给函数的参数的影响为零。

关于c++ - 在 protobuf 对象上调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401339/

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