从D中的析构函数调用模块级函数(似乎抛出OutOfMemoryError)

时间:2011-09-06 16:52:06

标签: d

我有一个全局D模块,它包含一些辅助函数(即用于日志记录),它们位于模块级而不是类中。但是,当从析构函数调用这些函数时,我得到一个core.exception.OutOfMemoryError和/或应用程序挂起并崩溃。我在这里做错了吗?

精简测试用例:

logger.d

module main.logger;
void log(const(char)[] msg) {
    auto time = // GET TIME OF DAY SOMEHOW
    std.stdio.writeln(std.conv.to!string(time) ~ " " ~ msg);
}

class.d

module main.class;
import main.logger;

class A {
    public:
        this() {}
        ~this() { log("Destructor"); }
}

1 个答案:

答案 0 :(得分:4)

垃圾收集器当前不支持在终结器中调用的抛出异常或内存分配。因此,您无法可靠地执行导致分配的任何事情或从类析构函数中抛出未捕获的异常。