我在 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