关于DLL中对象的动态创建与删除的问题

关于DLL中对象的动态创建与删除的问题

最近有看到一些文章讨论怎样轻松的使用DLL,其中有一个错误,那就是在DLL中创建的对象未在DLL中删除,如下示:

// someheadfile.h
#include < memory >

class  __declspec(dllexport) Interface
{
 
public:
  virtual 
void foo() = 0;
}
;

class  __declspec(dllexport) Impl :  public  Interface
{
 
public:
   virtual 
void foo()
   
{}
}
;

__declspec(dllexport)
std::auto_ptr
< Impl >  DLLCreate()
{
  
return std::auto_ptr<Impl>(new Impl);
}

上面的做法貌似可以做到自动删除动态生成的对象,但,只有DLL和用户都动态链接C/C++运行库时它才会运行正确,否则,创建和删除会在不同的堆栈空间进行,从而导致错误 
所以还是老实的在提供一个
DLLDelete()用于删除在DLL中生成的对象。

你可能感兴趣的:(关于DLL中对象的动态创建与删除的问题)