不调用自己类的Qt脚本析构函数

时间:2015-01-21 09:13:28

标签: c++ qt qtscript

我正在使用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();
}

我希望有人有任何提示或建议。提前谢谢。

0 个答案:

没有答案