目前,我正在测试一些简单的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年开始的,不是开源的,我对它们实现的了解非常有限,所以如果问题就在那里,我就无法改变它。
发布于 2018-11-28 17:17:20
。
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();
}以防他们中的任何一个在你的环境中工作。
与其他语言不同,将构造函数声明为私有函数似乎不适用于其他语言。
https://stackoverflow.com/questions/53236443
复制相似问题