AngelScript - Избегайте запуска неявного конструктора по умолчанию

В настоящее время я тестирую несколько простых вещей AngelScript и заметил кое-что странное, что касается инициализации объектов из классов.

Допустим, я определяю класс следующим образом:

class MyClass {
    int i;

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

Я могу создать объект этого класса, выполнив это:

MyClass obj = MyClass(5);

Однако кажется, что я также могу создать объект, выполнив это:

MyClass obj;

Проблема здесь в том, что obj.i становится значением по умолчанию, поскольку оно не определено. Кроме того, добавление конструктора по умолчанию в мой класс и вызов функции печати в каждом из них показывает, что когда я делаю MyClass obj = MyClass(5); Обе конструкции вызываются, а не только те, у которых есть соответствующий параметр. Это кажется мне рискованным, так как это может излишне инициализировать множество свойств для этого "призрачного" экземпляра.

Я могу избежать этой двойной инициализации с помощью дескриптора, но это больше похоже на обходной путь, чем на решение:

MyClass@ obj = MyClass(5);

Итак, мой вопрос сводится к:

  1. Могу ли я потребовать вызова конкретного конструктора?
  2. Могу ли я предотвратить запуск конструктора по умолчанию?
  3. Как правильно обращаться с необходимыми параметрами при создании объектов?

Имейте в виду, что это чисто на языке сценариев AngelScript, полностью отделенном от кода C++ хост-приложения. Хост с 2010 года и не с открытым исходным кодом, и мои знания об их реализации очень ограничены, поэтому, если проблема лежит там, я не могу ее изменить.

1 ответ

Решение
  1. Чтобы объявить класс и отправить выбранное вами значение конструктору, попробуйте: MyClass@ obj(5);

  2. Чтобы не использовать конструктор по умолчанию, объявите его как закрытый.

Другие вопросы по тегам