dip10003
不能在类上引用计数
,至少是安全的,因为没有逃逸分析
.
想法是编写不暴露
字段的类.成员函数
控制所有访问
.
如下编译:
@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);
幸运的是,"域"
只是减法
,只是限制
你.因此,编译器会检测到使用中
的错误
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现