首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngelScript -避免隐式默认构造函数运行

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

Stack Overflow用户
提问于 2018-11-10 06:07:40
回答 1查看 217关注 0票数 0

目前,我正在测试一些简单的AngelScript内容,当涉及到如何从类初始化对象时,我注意到了一些奇怪的东西。

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

代码语言:javascript
复制
class MyClass {
    int i;

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

通过这样做,我可以创建这个类的一个对象:

代码语言:javascript
复制
MyClass obj = MyClass(5);

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

代码语言:javascript
复制
MyClass obj;

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

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

代码语言:javascript
复制
MyClass@ obj = MyClass(5);

因此,我的问题总结如下:

  1. 我可以要求调用一个特定的构造函数吗?
  2. 我能阻止默认构造函数运行吗?
  3. 在创建对象时处理所需参数的正确方法是什么?

请记住,这完全是用AngelScript脚本语言编写的,完全独立于主机应用程序的C++代码。主机是从2010年开始的,不是开源的,我对它们实现的了解非常有限,所以如果问题就在那里,我就无法改变它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 17:17:20

  1. 为了声明类并将您选择的值发送给构造函数,尝试: MyClass obj(5);
  2. 若要防止使用默认构造函数,请创建该构造函数并使用:

代码语言:javascript
复制
MyClass()
{
  abort("Trying to create uninitialized object of type that require init parameters");
}

代码语言:javascript
复制
{
  exit(1);
}

代码语言:javascript
复制
{
  assert(1>2,"Trying to create uninitialized object of type that require init parameters");
}

代码语言:javascript
复制
{
  engine.Exit();
}

以防他们中的任何一个在你的环境中工作。

与其他语言不同,将构造函数声明为私有函数似乎不适用于其他语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53236443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档