koffi
Version:
Fast and simple C FFI (foreign function interface) for Node.js
78 lines (55 loc) • 2.24 kB
Markdown
# HandleScope
The HandleScope class is used to manage the lifetime of object handles
which are created through the use of node-addon-api. These handles
keep an object alive in the heap in order to ensure that the objects
are not collected while native code is using them.
A handle may be created when any new node-addon-api Value or one
of its subclasses is created or returned. For more details refer to
the section titled [Object lifetime management](object_lifetime_management.md).
## Methods
### Constructor
Creates a new handle scope on the stack.
```cpp
Napi::HandleScope::HandleScope(Napi::Env env);
```
- `[in] env`: The environment in which to construct the `Napi::HandleScope` object.
Returns a new `Napi::HandleScope`
### Constructor
Creates a new handle scope on the stack.
```cpp
Napi::HandleScope::HandleScope(Napi::Env env, Napi::HandleScope scope);
```
- `[in] env`: `Napi::Env` in which the scope passed in was created.
- `[in] scope`: pre-existing `Napi::HandleScope`.
Returns a new `Napi::HandleScope` instance which wraps the `napi_handle_scope`
handle passed in. This can be used to mix usage of the C Node-API
and node-addon-api.
```cpp
operator Napi::HandleScope::napi_handle_scope() const
```
Returns the Node-API `napi_handle_scope` wrapped by the `Napi::EscapableHandleScope` object.
This can be used to mix usage of the C Node-API and node-addon-api by allowing
the class to be used be converted to a `napi_handle_scope`.
### Destructor
```cpp
Napi::HandleScope::~HandleScope();
```
Deletes the `Napi::HandleScope` instance and allows any objects/handles created
in the scope to be collected by the garbage collector. There is no
guarantee as to when the garbage collector will do this.
### Env
```cpp
Napi::Env Napi::HandleScope::Env() const;
```
Returns the `Napi::Env` associated with the `Napi::HandleScope`.
## Example
```cpp
for (int i = 0; i < LOOP_MAX; i++) {
Napi::HandleScope scope(info.Env());
std::string name = std::string("inner-scope") + std::to_string(i);
Napi::Value newValue = Napi::String::New(info.Env(), name.c_str());
// do something with newValue
};
```
For more details refer to the section titled [Object lifetime
management](object_lifetime_management.md).