1
爲什麼在D2中不推薦使用類分配器和釋放器?已棄用的類分配器
而另一個小問題是,在D中如何實現引用?
我在某處看到了關鍵字ref,但我不知道,參考文獻是如何實現的。
讓D有點像全局句柄表,引用只是索引?
爲什麼在D2中不推薦使用類分配器和釋放器?已棄用的類分配器
而另一個小問題是,在D中如何實現引用?
我在某處看到了關鍵字ref,但我不知道,參考文獻是如何實現的。
讓D有點像全局句柄表,引用只是索引?
類分配器和釋放器由於使用它們而不再使用,用戶並不真正知道發生了什麼,導致內存安全或泄漏問題。通常,D程序假定new X
與垃圾收集器一起工作,並且在分配器被更改的情況下,它可能不會導致混淆。相反,如果你想改變分配,你應該提供一個工廠函數,所以很明顯,這是完全不同的。與私有構造函數一起,您可以強制使用您的自定義函數。
引用被實現爲指針。當您在D中編寫void foo(ref int b) { b = 10; }
時,就好像您在C中編寫了void foo(int* b) { *b = 10; }
。指針是一個以數字表示的內存地址。它指向對象的位置並允許通過它更改對象。複製指針與複製常規整數一樣便宜,因此將它們傳遞給函數非常高效。
這很傷心。在C++中,程序員知道它是如何工作的,但在D中不是。它將在未來(類分配器和分配器)被刪除?像範圍關鍵字? – Seraph
我如何使工廠功能(這是一個簡單的功能?)?如何在地址上調用構造函數? – Seraph
scope關鍵字不會消失,現在只有一個非常具體的用法,即棄用它 - 在類聲明中使用它將其放入堆棧。它被棄用,因爲轉義該引用將導致內存損壞。但是,範圍也應該禁止轉義引用,所以如果我們真的實現了這個,棧優化可以回來。示波器的其他用途,例如'範圍(出口)',不會去任何地方。 –