![]() |
1
22
它是
一些gc不能很好地处理循环引用。为了摆脱它们,你必须打破“某处”的循环。在哪里?好吧,如果有疑问,那就到处都是。这样做一年,它就会进入你的指尖。
最后,我们有必须显式关闭的api,因为没有真正的语言支持说“当我完成它时关闭它”,让计算机像GC一样解决它。所以你有一个必须调用清理代码的API和一个不需要的API。这很糟糕,而且鼓励像上面这样的模式。 |
![]() |
2
8
|
![]() |
3
3
它来自C/C++,其中明确地将指针设置为空是标准(消除)。 dangling pointers ) 调用free()后:
|
![]() |
4
3
它在具有确定性垃圾收集且没有RAII的语言中更为常见,例如旧的Visual Basic,
|
![]() |
5
2
我在VBScript代码(经典的ASP)中看到过很多这样的东西,我想它就是从那里来的。 |
![]() |
6
2
|
![]() |
7
2
我猜想这种模式来自于将C++代码翻译成C语言,而不停顿以理解C语言终结和C++最终化之间的差异。在C++中,我经常在析构函数中排除一些东西,或者用于调试目的(这样,您可以在调试器中看到引用不再有效),或者很少,因为我希望释放一个智能对象。如果这是我想要的意思 呼叫释放 由于不同的原因,在VB/VBScript中也经常看到这种模式。我想了想是什么导致了这种情况: http://blogs.msdn.com/b/ericlippert/archive/2004/04/28/122259.aspx |
![]() |
8
1
可归零的约定起源于
|
![]() |
9
1
它来自C/C++,在一个已经释放的指针上做一个For()/删除可能导致崩溃,而释放一个空指针根本不起作用。 这意味着这个构造(C++)会引起问题。
结论:在C#、Java和其他垃圾收集语言中,这是完全不必要的。 |
![]() |
10
1
考虑一个小小的修改:
作者可能希望确保great-Vavoom(*)不会在以前抛出并捕获异常时获取指向错误对象的指针。偏执,导致防御性编码,不一定是一件坏事在这个行业。
|
![]() |
11
0
|
![]() |
12
0
我可以从对垃圾收集工作原理的误解,或者迫使GC立即启动的努力中看到它——也许是因为
|
![]() |
13
0
我以前在一些Java代码中见过这种情况。它被用在一个静态变量上,表示应该销毁对象。 不过,它可能不是源于Java,因为将它用于除静态变量以外的任何其他对象在Java中也没有意义。 |
![]() |
14
-4
它来自C++代码,尤其是C++代码。
. 在这种情况下,它就相当于
|
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 2 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 2 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
![]() |
Tanvi Jaywant · 如何重载类 6 年前 |