1

私は qtscript4 を使用しており、エンジンにいくつかのタイプを追加しました。

新しいオブジェクトを作成する関数を登録し、所有権をエンジンに渡してエンジンに登録しました。しかし、オブジェクトは破棄されず、スコープを離れないようです (少なくともデバッガーはデストラクタで中断しません)。

次の行は登録に似ています。

   QScriptEngine *io_en;

   qScriptRegisterMetaType_helper(io_en, metatypeid, marshalfunctions, demarshalfunction, QScriptValue());
   QScriptValue ctor = io_en->newFunction(ObjectConstruction<T>::constructMyObject);
   QScriptValue metaObject = io_en->newQMetaObject(&QObject::staticMetaObject, ctor);
   io_en->globalObject().setProperty(name, metaObject);

ObjectConstruction<T>::constructMyObject次のようになります。

template <class T>
struct ObjectConstruction
{
  static QScriptValue constructMyObject(QScriptContext *, QScriptEngine *engine)
  {
    T *ob = new T;
    return engine->newQObject(ob, QScriptEngine::ScriptOwnership);
  }
};

破壊を除いて、すべてが機能しているようです。ですので、初期登録は正しいように思います。また、コードに があるたびにコンストラクターが呼び出されvar c = new MyObj;ますが、スコープ外に出ても何も起こりません。ただし、デストラクタはアプリケーションの終了時に呼び出されます。たぶん、javascriptは「範囲外」という別の意見を持っています。しかし、オブジェクトのインスタンス化は関数スコープにあるため、関数の最後で破棄されることを期待していました。

Main.prototype.someTest= function()
{
  var c = new MyObj;
  c.doSomething();
}

誰かがヒントや提案をしてくれることを願っています。前もって感謝します。

4

0 に答える 0