我正在尝试在使用Loki::Factory
VC8 编译的项目中使用(我不允许切换到较新的编译器)。程序退出时出现问题,我可以使用此基本代码重现该问题(这是您在使用工厂时可能想要实现的最起码)
#include "stdafx.h"
#include <loki/Factory.h>
struct Base{};
Loki::Factory< Base, int> factory;
struct Derived : public Base{};
Base* buildDerived(){
return new Derived();
}
namespace {
bool registeredD = factory.Register(1, buildDerived);
}
int _tmain(int argc, _TCHAR* argv[])
{
system("pause");
return 0;
}
一切都很好,直到系统暂停要求使用按键(如system("pause")
);但是,当我按下键时,由于从函数内部抛出未处理的异常,程序中止
~auto_ptr()
{ // destroy the object
delete (_Ty *)_Myptr;
}
可以在 Visual Studio 文件“内存”中找到。异常是访问冲突,堆栈以:
compmgr.dll!std::auto_ptr<Loki::FunctorImpl<Interface2D::IElement *,Loki::NullType,Loki::SingleThreaded> >::~auto_ptr<Loki::FunctorImpl<Interface2D::IElement *,Loki::NullType,Loki::SingleThreaded> >() Riga 718 + 0x32 byte C++
compmgr.dll!Loki::Functor<Interface2D::IElement *,Loki::NullType,Loki::SingleThreaded>::~Functor<Interface2D::IElement *,Loki::NullType,Loki::SingleThreaded>() + 0x2b byte C++
std::auto_ptr
我在互联网上找不到任何关于使用Loki 的参考。
如何解决问题?