Я проектирую систему в C/C++, которая расширяется со всеми типами плагинов. Существует хорошо определенный C public API, который в основном работает с (const) char*
и другими типами указателей. Плагины скомпилированы в файлы .so или .dll, и основное приложение загружает их при запуске, а затем выгружает или перезагружает их по запросу.Запуск плагинов в песочнице
Плагины могут прийти в различных источниках, надёжный и не так :)
Теперь я хотел бы, чтобы убедиться, что если один плагин делает что-то глупое (например, пытается освободить память, которую он был не должен освобождаться), это действие не разрушает всю систему, а просто замечает основную систему о неверном плагине для него, чтобы удалить ее из очереди.
Код вызовов делается следующим образом:
const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
plugins[i]->execute(data);
}
но если plugin[0]
освобождает «от несчастного случая» строки данных или перезаписывает или по ошибке перескакивает на адрес 0x0 это принесет бы вниз всю систему , и я не хочу этого. Как я могу избежать такой катастрофы. (Я знаю, я могу дублировать строку data
... это не решает мою проблему :))
Помог ли мой ответ? Если да, примите его как правильный ответ. –