HarmonyOS 鸿蒙Next NAPI 通过 napi_wrap 创建的对象似乎没有被销毁
HarmonyOS 鸿蒙Next NAPI 通过 napi_wrap 创建的对象似乎没有被销毁
问题描述:
在 C++ 当中使用下面的方法包装了一个 C++ 的对象:
// 用法1:napi_wrap不需要接收创建的napi_ref,最后一个参数传递nullptr,创建的napi_ref是弱引用,由系统管理,不需要用户手动释放napi_wrap(env, jsobject, nativeObject, cb, nullptr, nullptr);
按照文档的说明,这个对象会在 GC 的时候自动销毁,并且通过调用 cb 来完成 C++ 对象的析构。
现在的问题是,发现 cb 没有被调用,导致 C++ 对象一直没有析构。
请问问题是已经解决了吗,我这边试了还是不销毁,需不需要调用别的代码呢?
在HarmonyOS鸿蒙Next NAPI环境中,napi_wrap
函数用于将原生C/C++对象与JavaScript对象进行关联。当你发现通过 napi_wrap
创建的对象似乎没有被销毁时,这通常与内存管理和对象生命周期管理有关。
-
确保解除包装:在JavaScript对象不再需要时,应确保调用
napi_remove_wrap
来解除JavaScript对象与原生对象的关联,这样原生对象才有可能被垃圾回收机制处理。 -
检查引用计数:如果原生对象使用了智能指针或其他形式的引用计数,确保所有引用在不再需要时被正确释放。
-
分析内存泄漏:使用内存分析工具检查是否存在内存泄漏。这可以帮助识别哪些对象或资源未被正确释放。
-
原生对象析构函数:如果可能,为原生对象定义析构函数,以便在对象被销毁时执行必要的清理操作。
-
JavaScript侧管理:确保JavaScript代码中没有意外的全局变量或闭包导致对象无法被垃圾回收。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html