Я собираю приложение, используя Qt 5.12, где пользователи будут загружать сценарии JS, которые взаимодействуют с приложением через его API. Эти сценарии объединены в «проекты» (т. е. несколько модулей JS, которые зависят друг от друга), и в любое время я хочу, чтобы в механизм JS загружался только один проект, поэтому, если пользователь загружает другой проект, я хочу, чтобы предыдущий контекст, который нужно очистить.
Основываясь на документации, я предположил, что если я просто удалю объект QJSEngine и создам новый, это позволит мне создать свежий JS-контекст.
QJSEngine* jsEngine = new QJSEngine();
// Load JS modules and run code...
jsEngine->collectGarbage();
delete jsEngine;
jsEngine = new QJSEngine();
// Load new JS modules...
Когда я пытаюсь запустить этот код, я получаю исключение нарушения прав доступа в delete jsEngine
. Это действительно странно, потому что в самой документации указано
Мусор не собирается из постоянной кучи JS во время уничтожения QJSEngine. Если вам нужно освободить всю память, вызовите collectGarbage вручную прямо перед уничтожением QJSEngine.
что для меня означало, что я должен быть в состоянии сделать это. У кого-нибудь есть идеи? Заранее спасибо!
deleteLater
или сделать главное окно родителем каждого QJSEngine, который я создаю (и, таким образом, очищать их, когда приложение закрывается), но проблемы сохраняются. По какой-то причине в тот момент, когда у меня есть более одного экземпляра, или если я пытаюсь удалить экземпляр в любое другое время, кроме как при закрытии приложения, я получаю какую-то ошибку доступа к памяти. - person yah_nosh   schedule 13.04.2019