假设我有以下代码:
class Foo
{
private this(int x){ }
}
void
main()
{
auto f = new Foo(4);
}
令我惊讶的是,这实际上是编译的。我希望私有构造函数在它定义的类之外是不可用的,就像方法一样,但事实并非如此。语言参考甚至没有提到构造函数中的访问修饰符'部分。
所以问题是双重的:访问修饰符在应用于构造函数时会做什么(如果它根本不做任何事情),我该如何隐藏ctor?
答案 0 :(得分:4)
构造函数上的访问修饰符与其他地方的访问修饰符完全相同...但要记住的关键是在D中,访问控制仅适用于模块之外。同一模块中的所有内容也可以看到其中的所有内容,但私有ctor会阻止模块外部的构建。
这与许多其他编程语言不同。我们的想法是D模块允许您定义辅助类,而无需像C ++的friend
功能那样。