Tag: 循环引用

如何以及何时在Python中正确使用weakref

我有一些代码,其中类的实例有父对象之间的引用,例如: class Node(object): def __init__(self): self.parent = None self.children = {} def AddChild(self, name, child): child.parent = self self.children[name] = child def Run(): root, c1, c2 = Node(), Node(), Node() root.AddChild("first", c1) root.AddChild("second", c2) Run() 我认为这会创build循环引用,这样root , c1和c2在Run()完成后不会被释放,对吗? 那么,怎样才能让他们获得释放呢? 我想我可以做一些像root.children.clear()或self.parent = None – 但是如果我不知道该怎么做呢? 这是一个适当的时间来使用weakref模块? 什么,我确实弱化了? parent属性? children属性? 整个对象? 上述所有的? 我看到关于WeakKeyDictionary和weakref.proxy的讨论,但是在这种情况下,我不清楚它们应该如何使用。 这也是python2.4(不能升级)。 更新:示例和摘要 什么对象weakref-ify取决于哪个对象可以生存没有另一个,什么对象相互依赖。 寿命最长的物体应该包含较短寿命物体的弱点。 […]

shared_ptr和weak_ptr的区别

我正在阅读Scott Meyers的“Effective C ++”一书。 有人提到, tr1::shared_ptr和tr1::weak_ptr像内置指​​针一样工作,但是它们跟踪有多less个tr1::shared_ptrs指向一个对象。 这被称为参考计数。 这可以很好地防止非循环数据结构中的资源泄漏,但是如果两个或多个对象包含tr1::shared_ptrs以形成一个循环,那么即使循环的所有外部指针都具有循环,循环也可以使对方的引用计数保持在零以上被摧毁。 这就是tr1::weak_ptrs进来的地方。 我的问题是循环数据结构如何使引用计数大于零。 我恳请一个例子C ++程序。 weak_ptrs如何解决问题? (再次,请举例)。

垃圾收集器和循环引用

考虑这两个类: public class A { B b; public A(B b) { this.b = b; } } public class B { A a; public B() { this.a = new A(this); } } 如果我有像上面这样devise的课程,垃圾收集员(GC)会收集这些课程的对象吗? 假设我这样做: void f() { B b = new B(); } 在这个方法中,我创build了一个名为b的B实例,当方法返回时, b超出范围,GC应该能够收集它,但是如果要收集它,则必须先收集第一个哪一个是B的成员,而要收集a ,则需要先收集b这个A的成员。 它变成圆形。 所以我的问题是:这样的循环引用是为了防止GC收集对象? 如果是,那么我们如何避免这个问题呢? 我们如何确保在课堂devise中没有循环引用? 是否有任何工具(或编译器选项)可以帮助我们检测循环引用? 如果不是,我们在哪里以及为什么使用WeakReference类? 它的目的是什么?

Json和循环引用例外

我有一个对象有一个循环引用另一个对象。 鉴于这些对象之间的关系,这是正确的devise。 为了显示 Machine => Customer => Machine 正如所料,当我尝试使用Json序列化机器或客户对象时遇到了一个问题。 我不确定的是如何解决这个问题,因为我不想破坏机器和客户对象之间的关系。 有什么解决这个问题的select? 编辑 目前我正在使用Controller基类提供的Json方法 。 所以我正在做的序列化和以下一样基本: Json(machineForm);

即使有循环引用,如何将DOM节点序列化为JSON?

我想序列化DOM节点,甚至整个window到JSON。 例如: >> serialize(document) -> { "URL": "http://stackoverflow.com/posts/2303713", "body": { "aLink": "", "attributes": [ "getNamedItem": "function getNamedItem() { [native code] }", … ], … "ownerDocument": "#" // recursive link here }, … } JSON.stringify() JSON.stringify(window) // TypeError: Converting circular structure to JSON 问题是JSON默认不支持循环引用。 var obj = {} obj.me = obj JSON.stringify(obj) // TypeError: Converting circular […]

如何处理Node.js中的循环依赖关系

最近我一直在和nodejs一起工作,如果这是一个明显的问题,我们还是要继续关注模块系统。 我想要的代码大致如下所示: a.js (主节点运行的主文件) var ClassB = require("./b"); var ClassA = function() { this.thing = new ClassB(); this.property = 5; } var a = new ClassA(); module.exports = a; b.js var a = require("./a"); var ClassB = function() { } ClassB.prototype.doSomethingLater() { util.log(a.property); } module.exports = ClassB; 我的问题似乎是,我不能从ClassB的实例内访问ClassA的实例。 有没有一个正确/更好的方式来构build模块来实现我想要的? 有没有更好的方式来分享模块之间的variables?

Python中的循环(或循环)导入

如果两个模块相互导入会发生什么? 为了概括这个问题,Python中的循环导入呢?