【发布时间】:2012-01-12 18:02:21
【问题描述】:
我最近开始使用 Tango 库学习 D 版本 1。我决定编写一个小类Dout 来包装tango.io.Stdout,除了它覆盖opShl 以更好地匹配C++ 的<< 样式输出。我的实现是这样的:
// dout.d
module do.Dout;
import tango.io.Stdout;
class Dout
{
public static Dout opShl(T) (T arg)
{
stdout(arg);
return new Dout;
}
public static Dout newline()
{
stdout.newline;
return new Dout;
}
}
在 main 中,我像这样简单地调用了 Dout.opShl()。
// main.d
import do.Dout;
import tango.io.Console;
int main(char[][] argv)
{
Dout << "Hello" << " world!" << Dout.newline;
Cin.get();
return 0;
}
这可行,但在按下回车键并退出 main 后,会打印文本“do.Dout.Dout”。单步执行代码后,发现汇编指令处打印了这段文字:
00406B5C call __moduleDtor (40626Ch)
do.Dout 的析构函数在哪里被调用。
我的问题是,为什么在退出 main 时会打印模块名称,我该怎么做才能阻止这种行为?
【问题讨论】:
-
离题,但仍然相关 - D1 不会进一步开发。 D 版本 2 是未来,如果你想学习 D,我衷心推荐你选择那个版本。有一个项目将 Tango 移植到 D2,所以我想你花在学习 Tango 上的时间不会浪费时间。
-
真;我决定使用 D1,因为我想使用 Tango 而不是 Phobos;来自 C++ 背景,我认为 Tango 会更接近。等 D2 稳定下来,我肯定会换的。
-
虽然这可能很有趣,但不要为标准输出重载左移运算符。 D1 也将开发到 2013 年。
-
@he_the_great 我意识到这在实际代码中是一件坏事。我只是在玩耍,感受一下 D 的运算符重载。