Class AngelScript-避免隐式默认构造函数运行

Class AngelScript-避免隐式默认构造函数运行,class,angelscript,Class,Angelscript,我目前正在测试一些简单的AngelScript内容,注意到在如何从类初始化对象方面有点奇怪 假设我定义了这样一个类: class MyClass { int i; MyClass(int i) { this.i = i; } } 我可以通过以下操作创建此类的对象: MyClass obj = MyClass(5); MyClass obj; 但是,我似乎也可以通过这样做来创建对象: MyClass obj = MyClass(5); MyClas

我目前正在测试一些简单的AngelScript内容,注意到在如何从类初始化对象方面有点奇怪

假设我定义了这样一个类:

class MyClass {
    int i;

    MyClass(int i) {
        this.i = i;
    }
}
我可以通过以下操作创建此类的对象:

MyClass obj = MyClass(5);
MyClass obj;
但是,我似乎也可以通过这样做来创建对象:

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

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

MyClass@ obj = MyClass(5);
因此,我的问题总结如下:

  • 我可以要求调用特定的构造函数吗?
  • 我可以阻止默认构造函数运行吗?
  • 创建对象时,处理所需参数的正确方法是什么?

  • 请注意,这完全是在天使脚本语言中,完全与宿主应用程序的C++代码分离。主机是2010年的,不是开源的,我对其实现的了解非常有限,因此如果问题存在,我无法更改它

  • 要声明类并将您选择的值发送给构造函数,请尝试: MyClass obj(5)

  • 要防止使用默认构造函数,请创建并使用:

  • 如果其中任何一个在您的环境中工作


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

    我认为handle方法是一种可行的方法。至于#2,可能这里使用的AngelScript版本太旧了,因为将构造函数设置为
    private
    ,会导致“预期标识符”语法错误。不过,谢谢你;把手没问题,我修正了答案。MyClass@obj(5);没有编译(我检查了)。在我检查了构造函数声明为private realy不起作用后,我再次修复了我的答案,正如您所说。我尝试了您添加的4种解决方案,但没有一种被识别出来。它们都给出了语法错误,就好像它们是与签名不匹配的常规函数或未声明的
    引擎一样。如果这是可行的,它可能依赖于我的主机应用程序中没有实现的东西。
    
    {
      assert(1>2,"Trying to create uninitialized object of type that require init parameters");
    }
    
    {
      engine.Exit();
    }