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);
所以我的问题总结为:
- 我可以要求调用特定的构造函数吗?
- 我可以阻止 运行 的默认构造函数吗?
- 创建对象时如何正确处理必填参数?
请注意,这是纯粹的 AngelScript 脚本语言,完全独立于宿主应用程序的 C++ 代码。主机是2010年的,不是开源的,我对他们的实现了解非常有限,所以如果问题出在这里,我无法更改。
为了声明 class 并将您选择的值发送给构造函数,请尝试:
MyClass obj(5);
为了防止使用默认构造函数创建它并使用:
.
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 中不起作用,这与其他语言不同。
我目前正在测试一些简单的 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);
所以我的问题总结为:
- 我可以要求调用特定的构造函数吗?
- 我可以阻止 运行 的默认构造函数吗?
- 创建对象时如何正确处理必填参数?
请注意,这是纯粹的 AngelScript 脚本语言,完全独立于宿主应用程序的 C++ 代码。主机是2010年的,不是开源的,我对他们的实现了解非常有限,所以如果问题出在这里,我无法更改。
为了声明 class 并将您选择的值发送给构造函数,请尝试: MyClass obj(5);
为了防止使用默认构造函数创建它并使用:
.
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 中不起作用,这与其他语言不同。