AngelScript - 避免来自 运行 的隐式默认构造函数

AngelScript - Avoid implicit default constructor from running

我目前正在测试一些简单的 AngelScript 内容,并注意到在涉及如何从 classes 初始化对象时我发现有些奇怪。

假设我这样定义 class:

class MyClass {
    int i;

    MyClass(int i) {
        this.i = i;
    }
}

我可以通过这样做创建这个 class 的对象:

MyClass obj = MyClass(5);

然而,我似乎也可以通过这样做来创建一个对象:

MyClass obj;

这里的问题是 obj.i 成为默认值,因为它是未定义的。 此外,向我的 class 添加默认构造函数并在每个构造函数中调用打印函数表明,当我这样做时 MyClass obj = MyClass(5); 两个构造函数都被调用,而不仅仅是具有匹配参数的构造函数。这对我来说似乎有风险,因为它可能会为此 "ghost" 实例不必要地初始化很多属性。

我可以通过使用句柄来避免这种双重初始化,但这看起来更像是一种变通方法而不是解决方案:

MyClass@ obj = MyClass(5);

所以我的问题总结为:

  1. 我可以要求调用特定的构造函数吗?
  2. 我可以阻止 运行 的默认构造函数吗?
  3. 创建对象时如何正确处理必填参数?

请注意,这是纯粹的 AngelScript 脚本语言,完全独立于宿主应用程序的 C++ 代码。主机是2010年的,不是开源的,我对他们的实现了解非常有限,所以如果问题出在这里,我无法更改。

  1. 为了声明 class 并将您选择的值发送给构造函数,请尝试: MyClass obj(5);

  2. 为了防止使用默认构造函数创建它并使用:

.

MyClass()
{
  abort("Trying to create uninitialized object of type that require init parameters");
}

{
  exit(1);
}

{
  assert(1>2,"Trying to create uninitialized object of type that require init parameters");
}

{
  engine.Exit();
}

以防其中任何一个在您的环境中工作。

将构造函数声明为私有似乎在 AS 中不起作用,这与其他语言不同。