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);
Итак, мой вопрос сводится к:
- Могу ли я потребовать вызова конкретного конструктора?
- Могу ли я предотвратить запуск конструктора по умолчанию?
- Как правильно обращаться с необходимыми параметрами при создании объектов?
Имейте в виду, что это чисто на языке сценариев AngelScript, полностью отделенном от кода C++ хост-приложения. Хост с 2010 года и не с открытым исходным кодом, и мои знания об их реализации очень ограничены, поэтому, если проблема лежит там, я не могу ее изменить.
1 ответ
Чтобы объявить класс и отправить выбранное вами значение конструктору, попробуйте: MyClass@ obj(5);
Чтобы не использовать конструктор по умолчанию, объявите его как закрытый.