我正在使用 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;
在代码中有 a 时也会调用构造函数,但如果超出范围则不会发生任何事情。然而,析构函数在应用程序退出时被调用。也许javascript对“超出范围”有不同的看法。但是我的对象实例化是在函数范围内,所以我希望它们在函数结束时被销毁;
Main.prototype.someTest= function()
{
var c = new MyObj;
c.doSomething();
}
我希望有人有任何提示或建议。提前致谢。