不能在类上​​引用计数​​​,至少是安全的,因为没有​​逃逸分析​​​.
想法是编写​​​不暴露​​​字段的类.​​成员函数​​​控制所有​​访问​​​.
如下编译:

@safe @nogc:

class C {
C g() => this;
}

//C f(C c); // 错误
C f(scope C c); // OK
//C f(scope C c) { return c.g; } // 错误

void main()
{
scope c = new C(); // 栈上分配,要求`域`字.
f(c);
}

已用简单规则区别​​ref return scope​​​.
大的​​​可用性​​​问题是​​scope​​​使用​​ref​​​参数的方式.
你真的需要​​​借用和物主​​​语义.按​​域​​​表​​借用​​​,用​​新的​​​类型限定符表​​物主​​​.
​​​"ref return scope"​​​只能​​跟踪栈​​.

class D{
C c;
}
class C {
D d;
int x=3;
this(D d)@safe @nogc{
//标记它为`域`确实会检测到该错误.
d.c=this;
this.d=d;
}
}
C foo(D d)@nogc @safe{
scope c = new C(d); // 删域不崩溃.
return c.d.c; // c逃逸
}
void main(){
import std.stdio;
writeln(foo(new D)); // 段错误.
}

加入​​漏洞​​​大全.
如果以通过​​​示例​​​使其失败,请发布到​​bugzilla​​​.
这就是​​​@live​​​添加的内容,不仅​​跟踪​​栈.

:尚未学习​​DIP1000​​​规则的​​D程序员​​​通常期望以下​​两个函数声明​​是等价的:

void foo(scope int** p);
void bar(scope ref int* p);

幸运的是,​​"域"​​​只是​​减法​​​,只是​​限制​​​你.因此,编译器会检测到​​使用中​​​的​​错误​​.