私は 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();
}
誰かがヒントや提案をしてくれることを願っています。前もって感謝します。