boost ::任何析构函数崩溃

时间:2012-02-06 12:41:36

标签: c++ boost dll destructor boost-any

主exe加载dll。从dll调用函数返回简单的boost :: any。如果在析构函数中FreeLibrary应用程序崩溃后删除了boost :: any。没关系。但是我无法理解为什么这个代码也会在r2析构函数中崩溃,在main和delete中创建的r2不需要dll代码。 如何在FreeLibrary之后保存boost :: any。 尝试没有外部“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 个答案:

答案 0 :(得分:1)

这取决于实际any的内容。例如,对于具有析构函数的某个对象,它可能是shared_ptr,而析构函数代码驻留在DLL中。然后,在DLL卸载之前,应该销毁any的所有实例。

答案 1 :(得分:0)

我遇到了一个内存管理器没有处理空指针的问题。