|  | 
|      | 
|  | 
| MissusesBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 11. Boost.DLL
  
   | |||||||||
| ![[Warning]](/img/warning.png) | Warning | 
|---|---|
| Типичные ошибки и ошибки находятся в этом разделе. Пожалуйста, внимательно прочитайте, это сэкономит много времени на отладку! | 
delete>или<free()>.catch(...)>блоке.try{ autof=dll::import<int()>(path_to_pugin,"function"); f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); }>
f>выходит из области действия, плагин разгружается, и ссылка на код исключения нарушается. Любая попытка использовать переменную исключения может использовать ссылку на свисание, что приводит к сбою сегментации. Исправьте свой код:<autof=dll::import<int()>(path_to_pugin,"function"); try{ f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); }>
voidfoo(){ shared_ptr<int>p; try{ autof=dll::import<shared_ptr<int>()>(path_to_pugin,"function"); p=f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); } std::cout<<*p; // crashes here }>
shared_ptr<int>>. Он сохраняет стертый тип удаления, код для этого удаления находится в плагине. При уничтожении<p>,<shared_ptr<int>>предпринимаются попытки вызвать этот удалитель, однако плагин уже был выгружен и код для удалителя больше не доступен.any>function>shared_ptr>std::type_index>std::type_info>std::exception_ptr>std::unique_ptr<Base>>Держащий<Derived>тип плагинаСтатья Missuses раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 11. Boost.DLL может быть полезна для разработчиков на c++ и boost.
:: Главная :: Chapter 11. Boost.DLL ::
| реклама |