2

D 仕様によると、すべてのクラスは参照によってアクセスされます。これは、次のクラスが次のようにメモリに配置されることを意味します。

擬似コード:

class A
{
    public int c;
    public B b;
}

タイプ A のオブジェクトのメモリ レイアウト:

4 bytes | int c

(4/8) bytes | address of b

参照を持つ代わりに b を A に直接埋め込むクラスを作成する方法はありますか? それとも私は何かを見落としていますか?

4

3 に答える 3

2

いくつかのオプションがあります:

まずB、構造体型を作成できます。ref セマンティクスが必要ない場合は、最初からクラスにしないでください。

それ以外の場合は、その場scoped!Bで割り当てるために使用できますb

import std.typecons;
class A
{
    public int c;
    public scoped!B b;
}

どちらの場合も、B を含む A が破棄されると、B のデストラクターが呼び出されます。

于 2016-03-10T13:36:19.823 に答える