是的,读取
不存在
数据是错误.
不变
数据也有
生命期
.
import std.stdio;
struct S {
int i;
this(int i) {
this.i = i;
writeln(i, "好");
}
~this() {
writeln(i, "坏");
}
}
void main() {
foreach (i; 0 .. 3) {
immutable s = S(i);
}
}
模块级
不变和"
静态常量
"的寿命
更长
,但也有
生命期
.然而,今天,不能在
不变
对象上
析构
,所以用
cast()
删除了限定符,应是
未定义行为
(今天?).
immutable(S) moduleS;
shared static this() {
moduleS = S(42);
}
shared static ~this() {
destroy(cast()moduleS);
}
void main() {
}
同样,认为模块级"
不变
"和"
静态常量
"数据符合你说的
与程序寿命相同
.
符合D的
GC
数据(包括
不变
数据).当无
引用
时,结束生命期.
另一个
示例
是使用
std.concurrency
在线程间
传递
不变消息时:该
数据
是运行时,只要
接收端
需要就保持数据
活动
.
不变
与
生命期
语义无关.
只是说在它
生命期
中不会修改这片
内存
.
,真正的问题在
常
.
可变和不变
都可自动转变成
常
.
像
immutable/const/shared
这样
存储类
不依赖
内存管理策略
.也没有规定
内存寿命
.
它仅指示
引用
它时如何
交互
.