boost :: любой деструктор - PullRequest
       35

boost :: любой деструктор

0 голосов
/ 06 февраля 2012

Main Exe загружает DLL. Вызывает функцию из dll, возвращающую простой boost :: any. Если boost :: any удален после сбоя приложения FreeLibrary в деструкторе. Все нормально. Но я не могу понять, почему этот код также дает сбой в деструкторе r2, r2, созданный в main и delete, не нуждается в коде dll. Как я могу сохранить boost :: any после FreeLibrary. Пробовал без внешнего "C" - тот же эффект.

Код консоли:

int _tmain(int argc, _TCHAR* argv[])
{
  any r2;

  HMODULE hmod = LoadLibrary(L"dll");
  typedef any (*dllfunc)(int,int,int);
  dllfunc func = (dllfunc) GetProcAddress(hmod,"Export1");

  { 
    any r = func(1,2,3);
    r2 = r;
  }

  FreeLibrary(hmod);
  return 0;
}

Код Dll:

extern "C" 
{
  DLL_API any Export1(int a,int b, int c)
  {
    return a+b+c;
  }
}

компилятор Visual Studio 2005

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Это зависит от того, что на самом деле any. Например, это может быть shared_ptr для некоторого объекта с деструктором, тогда как код деструктора находится в DLL. Затем все экземпляры any должны быть уничтожены до выгрузки DLL.

0 голосов
/ 19 февраля 2013

У меня была такая же проблема с менеджером памяти, который не обрабатывал нулевые указатели.

...