【发布时间】:2012-11-18 18:51:19
【问题描述】:
我在 nif 函数 (erlang nif) 中使用 protobuf,需要创建 protobuf 消息类型的资源。我写了这样的东西:
ERL_NIF_TERM create_resource(ErlNifEnv *env, const MyClass &msg)
{
size_t size = sizeof(MyClass);
MyClass *class = (MyClass *)enif_alloc_resource(MY_CLASS, size);
memcpy(class, &msg, size);
// class->CopyFrom(&msg);
ERL_NIF_TERM term = enif_make_resource(env, class);
enif_release_resource(class);
return term;
}
问题是.. 像这样复制 protobuf 消息是否合法,并且在清理时只需释放它:
delete pointer
? 似乎一切都在这里,但我不舒尔,因为复制对象的构造函数没有被调用,并且可能有一些带有静态变量等的魔法...... 另外..我需要在 memcpy 之后调用 CopyFrom 吗?
更新:MyClass 是 C++ 类而不是 C
【问题讨论】:
-
我的朋友建议我不要从类对象中获取资源,而最好从对象上的指针中获取资源。我会尝试这种方法。通过这种方式,我将确保正确调用构造函数和析构函数。
-
嘿,顺便说一句,我不知道你为什么要使用协议缓冲区,但如果你需要 erlang 兼容性,总有 piqi:piqi.org
标签: erlang protocol-buffers memcpy erlang-nif