HarmonyOS鸿蒙Next中ArkTS对象绑定的C++对象如何回收

HarmonyOS鸿蒙Next中ArkTS对象绑定的C++对象如何回收 ArkTS对象绑定的C++对象如何回收?

在java中,一般可以由垃圾回收机制进行对象的回收,示例:

protected void finalize() throws Throwable
{
  try {
    close();
  } finally {
    super.finalize();
  }
}

那么,ArkTS对象内部创建绑定的c++对象,怎样通过类似java的 finalize时机自动执行内存回收,而不需要开发者主动调用。

3 回复

// js对象构造函数 static napi_value JsConstructor(napi_env env, napi_callback_info info) { // 创建napi对象 napi_value jDemo = nullptr;

size_t argc = 0;
napi_value args[1] = { 0 };

// 获取构造函数入参
napi_get_cb_info(env, info, &argc, args, &jDemo, nullptr);

// args[0] js传入的参数
char name[50];
size_t result = 0;
napi_get_value_string_utf8(env, args[0], name, sizeof(name) + 1, &result);

// 创建C++对象
MyDemo * cDemo = new MyDemo(name);
OH_LOG_INFO(LOG_APP, "%{public}s", (cDemo -> name).c_str());

// 设置js对象name属性
napi_set_named_property(env, jDemo, "name", args[0]);

// 绑定JS对象与C++对象
napi_wrap(
    env, jDemo, cDemo,
    // 定义js对象回收时回调函数,用来销毁C++对象,防止内存泄漏
    [](napi_env env, void * finalize_data, void * finalize_hint) {
        MyDemo *cDemo = (MyDemo *)finalize_data;
        delete cDemo;
        cDemo = nullptr;
    },nullptr, nullptr);
return jDemo;

}

更多关于HarmonyOS鸿蒙Next中ArkTS对象绑定的C++对象如何回收的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,ArkTS对象绑定的C++对象的回收主要通过智能指针管理机制实现。ArkTS与C++的交互通过NAPI(Node-API)进行,C++对象在ArkTS中被封装为Native Binding对象。当ArkTS对象不再被引用时,其绑定的C++对象也会被自动回收。

具体流程如下:

  1. 智能指针管理:C++对象使用std::shared_ptrstd::unique_ptr等智能指针进行管理,确保其生命周期与ArkTS对象绑定。
  2. NAPI对象析构:当ArkTS对象被垃圾回收时,NAPI会触发其绑定的C++对象的析构函数,释放相关资源。
  3. 引用计数:NAPI通过引用计数机制跟踪ArkTS对象的使用情况,当引用计数降为0时,C++对象会被释放。

开发者无需手动管理C++对象的回收,系统会自动处理。

在HarmonyOS鸿蒙Next中,ArkTS对象绑定的C++对象通过垃圾回收机制自动管理。具体步骤如下:

  1. 引用计数:C++对象通过智能指针(如std::shared_ptr)管理,确保对象在不再被ArkTS引用时自动删除。
  2. 垃圾回收:ArkTS的垃圾回收器会定期检查对象的引用情况,当C++对象不再被ArkTS引用时,触发析构。
  3. 手动释放:开发者也可以显式调用releasedispose方法,提前释放C++对象。

确保正确管理对象生命周期,避免内存泄漏。

回到顶部