ArkTS对象绑定的C++对象如何回收?

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

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

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

HarmonyOS
2024-05-30 22:49:34
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
coolhead2000

ArkTS无法直接回收c对象,可以在ArkTS侧业务完成后,通过api给c侧信号,在c++侧释放对象。

// 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; 
}
分享
微博
QQ
微信
回复
2024-05-31 21:55:36
相关问题
如何C/C++ 创建ArkTS对象
2264浏览 • 1回复 待解决
如何实现ArkTSC/C++对象传递
688浏览 • 1回复 待解决
ArkTS层通过接口访问C++对象
387浏览 • 1回复 待解决
如何将js传map转成c++对象
758浏览 • 1回复 待解决
如何实现ArkTSC/C++数组转换
782浏览 • 1回复 待解决
如何实现ArkTSC/C++HashMap转换?
1155浏览 • 0回复 待解决
napi常见用法:class对象绑定
1154浏览 • 1回复 待解决
HarmonyOS ArkTSC/C++交互
774浏览 • 1回复 待解决