Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript共享指针范例_Javascript_Ecmascript 6_Garbage Collection_Shared Ptr - Fatal编程技术网

Javascript共享指针范例

Javascript共享指针范例,javascript,ecmascript-6,garbage-collection,shared-ptr,Javascript,Ecmascript 6,Garbage Collection,Shared Ptr,所以,我正在用Javascript编写一个API。理想的要求包括它支持这样的结构: 有两个类:类核心和类公共。两者都有成员id。 不能存在多个具有相同id的Core实例,但每个实例必须具有唯一的id;但是,可能存在任意数量的具有相同id的公共实例。 每个公共实例都有一个对类Core实例的引用,引用的id值对应于该实例。 核心实例应该在指向它的最后一个公共实例被垃圾回收后立即被垃圾回收。 因此,当创建一个新的公共实例并给它一个id时,它收集并将其引用分配给现有的核心实例(如果存在),或者新的核心实

所以,我正在用Javascript编写一个API。理想的要求包括它支持这样的结构:

有两个类:类核心和类公共。两者都有成员id。 不能存在多个具有相同id的Core实例,但每个实例必须具有唯一的id;但是,可能存在任意数量的具有相同id的公共实例。 每个公共实例都有一个对类Core实例的引用,引用的id值对应于该实例。 核心实例应该在指向它的最后一个公共实例被垃圾回收后立即被垃圾回收。 因此,当创建一个新的公共实例并给它一个id时,它收集并将其引用分配给现有的核心实例(如果存在),或者新的核心实例(如果不存在)。 尽管并非绝对必要,但最好:

当删除对核心实例的最后一个引用时,将在其上运行一个方法,即析构函数 另外,当我在ES6中写这篇文章时,WeakMaps、WebAssembly和任何其他现代JSAPI都是允许的

这种结构在Javascript中可能吗?如果是,这种执行的结构是什么?或者,这是否完全超出了Javascript的功能范围

这种结构在Javascript中可能吗

是的。但是,您不能以任何方式拦截垃圾收集,如果对对象的所有引用都丢失了,它将默默地消失,没有人会注意到它。因此,如果你想注意到它,你必须明确地引起它:

 class Reference {
   constructor(to) { 
     this.to = to; 
     to.link();
   }

   free() { 
     this.to.unlink(); 
     this.to = undefined;
   }
 }

 class Referenceable {
   constructor() {
     this.count = 0;
   }

   link() { this.count++ }
   unlink() {
     if(!(--this.count)) {
       // your last words
     }
   }
 }

符合事实的我想我希望我能和显而易见的事情抗争到目前为止,我已经实现了它,以便核心实例以最大大小缓存在队列中。当公共实例需要它们各自的核心时,要么找到相应的核心并将其提升到队列的顶部,要么创建一个并排队,将最早的条目出列/删除。我不想排队,但我想这对我来说是可行的。谢谢