为什么D2中的类分配器和解除分配器已弃用?
另一个小问题,如何在D中实现引用?
我在哪里看过关键字ref,但我不知道,参考是如何实现的。
有D像全局句柄表一样思考,引用只是索引吗?
答案 0 :(得分:7)
不推荐使用类分配器和解除分配器,因为使用它们,用户并不真正知道发生了什么,导致内存安全或泄漏问题。通常,D程序假定new X
与垃圾收集器一起工作,并且分配器被更改,它可能不会,导致混淆。
相反,如果你想改变分配,你应该提供一个工厂功能,因此很明显这是以不同的方式完成的。与私有构造函数一起,您可以强制使用自定义函数。
引用实现为指针。当你在D中写void foo(ref int b) { b = 10; }
时,就像你在C中写void foo(int* b) { *b = 10; }
一样。指针是一个以数字表示的内存地址。它指向对象的位置,并允许通过它更改对象。复制指针和复制常规整数一样便宜,因此将它们传递给函数非常有效。