是否有什么办法让编译器探测出在哪些情况下会产生循环引用,然后给程序员报错,让程序员主动选择 Weak Reference?
这样子既可以避免出错,也可以更即时地销毁资源。
另外,我觉得内存管理与资源管理应该分开。引用计数为0的时候必须调用析构函数。但是调用释放内存的函数却非必要。这两件事情分开在某些场景下或许可以提升性能。
【 在 eGust (十年) 的大作中提到: 】
: 我同意,gc 产生的目的,就是把程序员从手动申请、释放内存中解脱出来。毕竟是人就会犯错,就算经验再丰富,也免不了犯错。更别提软件规模越来越大,别人的代码有没有内存管理的错误就更难看出来了。
: 比如 jvm、.net、go,以及脚本语言,都不需要动脑筋来管理内存。garbage collector 来负责内存管理,程序员没机会接触内存的申请和释放。
: 而很多支持引用计数的语言,比如 delphi、swift、rust,如果用了引用计数的机制,那你就得自己琢磨哪里该用 weak reference,不然就内存泄露给你看。
: ...................
--
FROM 183.250.222.*