原文 最新101.0版本dmd可接受
以下代码:
化简为:
这不是问题,因为编译器
可识别p的逃逸
,并在堆的闭包
中分配p
.每当嵌套函数
变成闭包
时,就堆分配
.
对没有转换成闭包
的嵌套函数
,在堆分配
的闭包中放p
,并对'return dg(&global);
产生一个错误.
第一个示例在'@safe'
代码中逃逸
了死栈变量
引用.当然是个问题
.
在堆上分配有个指向'x'
栈变量指针的'scope int*p'
的闭包环境
.
'qux'
使用'foo'
来逃逸
局部'x'
栈变量指针.当UB
时,不再引用
闭包环境.'foo'
只是允许'域'
来清洗任意指针的工具.'域'
指针进,非'域'
指针出.