nodejs / node-addon-examples

Node.js C++ addon examples from http://nodejs.org/docs/latest/api/addons.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Do we need `wrapper_`?

gabrielschulhof opened this issue · comments

In our ObjectWrap N-API examples we store the napi_ref returned from napi_wrap() in the native object instance although we never use it. To napi_delete_reference() in the destructor we need to also store the napi_env on the native instance – a practice we discourage.

Do we do this for illustration purposes? Can we remove this, since wrapper_ is not being used anywhere?

This is the extent to which we use wrapper_ and env_:

MyObject::MyObject(double value)
: value_(value), env_(nullptr), wrapper_(nullptr) {}
MyObject::~MyObject() {
napi_delete_reference(env_, wrapper_);
}

and

obj->env_ = env;
status = napi_wrap(env,
jsthis,
reinterpret_cast<void*>(obj),
MyObject::Destructor,
nullptr, // finalize_hint
&obj->wrapper_);

Compare with the Nan implementation. The use of the persistent reference may stem from there. If so, it may be a good time to diverge, especially since we document that we discourage storing the napi_env.

In fact, none of the Nan examples store a persistent reference to the JS instance. We should remove it.