2014-02-23 23 views
1

爲什麼在D2中不推薦使用類分配器和釋放器?已棄用的類分配器

而另一個小問題是,在D中如何實現引用?

我在某處看到了關鍵字ref,但我不知道,參考文獻是如何實現的。

讓D有點像全局句柄表,引用只是索引?

回答

7

類分配器和釋放器由於使用它們而不再使用,用戶並不真正知道發生了什麼,導致內存安全或泄漏問題。通常,D程序假定new X與垃圾收集器一起工作,並且在分配器被更改的情況下,它可能不會導致混淆。相反,如果你想改變分配,你應該提供一個工廠函數,所以很明顯,這是完全不同的。與私有構造函數一起,您可以強制使用您的自定義函數。

引用被實現爲指針。當您在D中編寫void foo(ref int b) { b = 10; }時,就好像您在C中編寫了void foo(int* b) { *b = 10; }。指針是一個以數字表示的內存地址。它指向對象的位置並允許通過它更改對象。複製指針與複製常規整數一樣便宜,因此將它們傳遞給函數非常高效。

+0

這很傷心。在C++中,程序員知道它是如何工作的,但在D中不是。它將在未來(類分配器和分配器)被刪除?像範圍關鍵字? – Seraph

+0

我如何使工廠功能(這是一個簡單的功能?)?如何在地址上調用構造函數? – Seraph

+0

scope關鍵字不會消失,現在只有一個非常具體的用法,即棄用它 - 在類聲明中使用它將其放入堆棧。它被棄用,因爲轉義該引用將導致內存損壞。但是,範圍也應該禁止轉義引用,所以如果我們真的實現了這個,棧優化可以回來。示波器的其他用途,例如'範圍(出口)',不會去任何地方。 –