QtScript and c++ object lifetime, создал в скрипте, юзаю в коде с++ |
Здравствуйте, гость ( Вход | Регистрация )
QtScript and c++ object lifetime, создал в скрипте, юзаю в коде с++ |
sergey_85 |
26.2.2010, 9:51
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 26.2.2010 Пользователь №: 1486 Спасибо сказали: 0 раз(а) Репутация: 0 |
Привет!
В программе использую скрипт, и мне необходимо создавать объект в скритпе, а затем использовать его в с++ коде (например создал объект в скрипте и передал его в форму ч/з ф-цию слот). Будут ли проблемы с утечкой памяти или наоборот скрипт удалит объект раньше времени, а я его все еще буду юзать в с++ коде? Время жизни формы < времени жизни скриптовой переменной Вот что пишет кутэ: Цитата Controlling QObject Ownership By default, the script engine does not take ownership of the QObject that is passed to QScriptEngine::newQObject(); the object is managed according to Qt's object ownership (see Object Trees and Object Ownership). You can change this behavior by specifying a different ownership mode as the second argument, overriding the default (QScriptEngine::QtOwnership). Specifying QScriptEngine::ScriptOwnership as the ownership mode will cause the script engine to take full ownership of the QObject and delete it when it determines that it is safe to do so. This ownership mode is appropriate if the QObject does not have a parent object, and/or the QObject is created in the context of the script engine and is not intended to outlive the script engine. For example, a constructor function that constructs QObjects only to be used in the script environment is a good candidate: QScriptValue myQObjectConstructor(QScriptContext *context, QScriptEngine *engine) { // let the engine manage the new object's lifetime. return engine->newQObject(new MyQObject(), QScriptEngine::ScriptOwnership); } Another ownership mode is QScriptEngine::AutoOwnership, where the ownership is based on whether the QObject has a parent or not. If the QtScript garbage collector finds that the QObject is no longer referenced within the script environment, the QObject will be deleted only if it does not have a parent. Но из этого так и не понятно будет ли жить мой объект, если я передам ссылку на него из скрипта в форму и буду юзать в коде с++ или сборщик мусора снесет его в нужный ему момент? Гаранитрую, что переменная engine будет жить дольше чем сама форма PS: Qt4.4.3 |
|
|
Haccel |
14.3.2010, 6:29
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 14.3.2010 Пользователь №: 1530 Спасибо сказали: 0 раз(а) Репутация: 0 |
Если ты доверишь управлять жизнью переменной скрипту, он уничтожит её ( с вызовом деструтора - как положено ) при сборке мусора, когда все ссылки на неё пропадут ( вообщем как он решит) , главное не наступи на мои грабли - в коде тоже не делай ссылок на эту переменную, так он никогда её не убъёт.
Это проверено. |
|
|
Текстовая версия | Сейчас: 2.12.2024, 1:30 |