d不变类中析构器

原文
不变类,并不一定保存在只读区.
析构器,只是对象终止时,调用的一片代码,析构器不应访问对象成员.

struct S {
  ~this() {
    import std.stdio;
    writeln("done");
  }
}

void main() {
  immutable a = S();
  auto b = immutable(S)();
}

两个对象,都是不变的,因而都执行了析构器.
destroy(),由程序员调用,此时会初值,而其他情况,不会赋值被析构对象.
当,不再有对象的引用时,垃集才收集他们.对象成员值与此无关.

~this() {
    writeln(__FUNCTION__);
}

~this() immutable {//表示`不变`对象的析构器
    writeln(__FUNCTION__);
}

但报错误,是因为实现问题.对应的构造器是这样:

import std.stdio;

struct S {
  this(int) {
    writeln(__PRETTY_FUNCTION__);
  }

  this(int) immutable {
    writeln(__PRETTY_FUNCTION__);
  }
}

void main() {
  auto a = immutable(S)(0);
  auto b = S(1);
}
posted @ 2021-12-18 09:54  zjh6  阅读(15)  评论(0)    收藏  举报  来源