Skip to content

Do we need wrapper_? #140

Description

@gabrielschulhof

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?

Activity

  1. gabrielschulhof commented on Jun 10, 2020

    @gabrielschulhof
    ContributorAuthor

    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_);

  2. gabrielschulhof commented on Jun 15, 2020

    @gabrielschulhof
    ContributorAuthor

    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.

  3. gabrielschulhof commented on Jun 16, 2020

    @gabrielschulhof
    ContributorAuthor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions