我目前正在测试一些简单的 AngelScript 东西,并注意到在如何从类中初始化对象时我发现有些奇怪。
假设我定义了一个这样的类:
class MyClass {
int i;
MyClass(int i) {
this.i = i;
}
}
我可以通过这样做来创建这个类的一个对象:
MyClass obj = MyClass(5);
但是,我似乎也可以通过这样做来创建一个对象:
MyClass obj;
这里的问题是它obj.i
成为一个默认值,因为它是未定义的。此外,向我的类添加一个默认构造函数并在每个类中添加一个 print 函数调用表明,当我这样做时,MyClass obj = MyClass(5);
会调用两个构造函数,而不仅仅是具有匹配参数的构造函数。这对我来说似乎很冒险,因为它可能会为这个“幽灵”实例不必要地初始化许多属性。
我可以通过使用句柄来避免这种双重初始化,但这似乎更像是一种解决方法而不是解决方案:
MyClass@ obj = MyClass(5);
所以我的问题总结为:
- 我可以要求调用特定的构造函数吗?
- 我可以阻止默认构造函数运行吗?
- 创建对象时处理所需参数的正确方法是什么?
请注意,这纯粹是使用 AngelScript 脚本语言,与宿主应用程序的 C++ 代码完全分开。主机是 2010 年的,不是开源的,我对其实现的了解非常有限,所以如果问题出在那儿,我无法更改。