如果我实例化DLL类会发生这种内存问题吗?

时间:2011-01-10 07:55:54

标签: c++ dll

关于DLL和不同版本的运行时,我有些不清楚。

我知道,例如,在我的DLL中,我有一个这样的函数:

void deletePointer(int *something)
{
   delete something;
}

如果在main()函数中使用new分配了某些东西,这可能会导致问题。我不清楚的地方如下:

说我在DLL中有一个类,我在main中实例化,然后尝试再次执行此操作,它仍然是一个问题吗?

例: //在我的DLL中

class Base
{
    void deletePointer(int *something)
    {
       delete something;
    }
}

//在exe

int main()
{
  Base * base = new Base();
  int * myInt = new int(23);
   base->deletePointer(myInt); //is this a problem?
}

基本上我不清楚的是,如果我实例化删除指针的DLL类,运行时“分配它的人,必须删除它”规则是适用的。

由于

2 个答案:

答案 0 :(得分:1)

是的,可能会导致问题。您需要做的只是在分配它的地方免费分配内存。这可能意味着您需要实现在DLL中创建和删除类实例的方法;例如,如果你想让DLL创建/销毁Base的实例,那么:

class Base
{
    static Base *create();
    static void destroy(Base *b);

}

在exe中:

int main()
{
  Base *base = Base::create();
  // blah
  Base::destroy(base);
}

答案 1 :(得分:0)

在这方面,DLL中的普通函数和DLL的类实例的方法之间没有区别。所以他们会导致相同的行为。