0

私は現在、いくつかの簡単な AngelScript をテストしていますが、オブジェクトがクラスからどのように初期化されるかに関して、少し奇妙なことに気付きました。

次のようなクラスを定義するとしましょう。

class MyClass {
    int i;

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

これを行うことで、このクラスのオブジェクトを作成できます。

MyClass obj = MyClass(5);

ただし、これを行うことでオブジェクトを作成することもできるようです:

MyClass obj;

ここでの問題はobj.i、それが未定義であるためデフォルト値になることです。MyClass obj = MyClass(5);さらに、デフォルトのコンストラクターをクラスに追加し、それぞれに print 関数呼び出しを追加すると、一致するパラメーターを持つコンストラクターだけでなく、両方のコンストラクターが呼び出されることがわかります。この「ゴースト」インスタンスの多くのプロパティを不必要に初期化する可能性があるため、これは危険に思えます。

ハンドルを使用することで、この二重の初期化を回避できますが、これは解決策というよりも回避策のように思えます。

MyClass@ obj = MyClass(5);

したがって、私の質問は次のように要約されます。

  1. 特定のコンストラクターの呼び出しを要求できますか?
  2. デフォルトのコンストラクターが実行されないようにすることはできますか?
  3. オブジェクトを作成するときに必要なパラメータを処理する適切な方法は何ですか?

これは純粋に AngelScript スクリプト言語であり、ホスト アプリケーションの C++ コードとは完全に分離されていることに注意してください。ホストは 2010 年のもので、オープンソースではなく、実装に関する私の知識は非常に限られているため、問題がそこにある場合は変更できません。

4

1 に答える 1