В настоящее время я тестирую несколько простых вещей 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 года и не с открытым исходным кодом, и мои знания об их реализации очень ограничены, поэтому, если проблема там, я не могу ее изменить.