在阅读了这个StackOverflow问题:直接泄漏和间接泄漏有什么区别?之后,给我留下的印象是,如果我修复了所有的直接泄漏(多个修复测试通过,因为一个间接泄漏可能在修复之前的直接泄漏之后变成直接泄漏),我最终会得到0。
我目前正在使用泄漏杀菌剂(LSAN),在修复了所有的直接泄漏(以及一些间接泄漏的结果)之后,我现在只剩下一堆间接泄漏了。为什么没有直接的?什么时候会发生这种事?如何诊断和修复剩余的漏洞?
发布于 2019-08-16 13:53:50
它们可能是循环引用。由于间接泄漏可以从其他泄漏的块中访问,因此循环依赖关系(例如,两个对象之间有相互引用),这两个对象都可能无法从根中访问。
例如,在观察者模式中,如果忘记在使用结束时取消注册(失效听者问题),则很容易保持循环引用。
一般来说,最好避免循环引用。如果从所有权的角度来看,所有者必须有对其拥有的对象的引用,反之亦然,在这种情况下,循环依赖是不可能的。如果是通过构造函数传递依赖项,它是可以实现的,并且不允许通过setter分配依赖项。另外,借用引用的Rust使循环依赖变得不可能。
https://stackoverflow.com/questions/57477703
复制相似问题