我是一位长期的Java / C ++程序员和新手Javascript程序员。我试图使用我以前用C ++编写的类创建一个Web应用程序。
在我的Javascript网络应用中,我使用Embind创建和使用最初用C ++编码的类。在Embind文档页面上,它说,
JavaScript代码必须显式删除它收到的任何C ++对象句柄,否则Emscripten堆将无限增长。
并且页面上的示例显示创建的对象在使用后立即被删除:
var x = new Module.MyClass; x.method(); x.delete();
在我的网络应用程序中,我希望C ++中的对象在网页的生命周期内保持不变。我希望能够按下页面上的按钮并更新我的对象的状态。如果我.delete()脚本末尾的对象,当我稍后尝试按下按钮时,它将不会持续存在。
在Embind示例embind.test.js中,可以在新创建的对象上调用.deleteLater():
var v =(new cm.ValHolder({}))。deleteLater();
我的问题是,如果我只是在创建对象时调用.deleteLater(),这是否足以在应用程序运行完毕或页面关闭时删除对象?我试图避免无限期地增加堆或导致任何内存泄漏。
同样,我是Javascript的新手,所以请指出我是否遗漏了任何明显的内容,或者是否对Javascript内存泄漏和指针的最佳做法一无所知。
如果我需要澄清任何事情,请告诉我。谢谢!
答案 0 :(得分:0)
我在同一条道路上,确实没有适合您的具体答案,但是作为JS开发人员,我可以与此合作: