Будет ли эта проблема с памятью, если я создаю экземпляр класса DLL? - PullRequest
1 голос
/ 10 января 2011

Есть кое-что, что мне неясно в отношении DLL и разных версий среды выполнения.

Я знаю, что если, например, в моей DLL у меня была такая функция:

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

если что-то было выделено с использованием new в моей функции main (), это может вызвать проблему. Я не совсем понимаю, о чем это:

скажем, у меня есть класс в DLL, и я создаю его экземпляр в main, а затем попробуйте сделать это снова, это все еще будет проблемой?

Ex: // в моей 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 ]

1 голос
/ 10 января 2011

Да, это может вызвать проблемы.Что вам нужно сделать, это просто освободить выделенную память в том месте, где вы ее разместили.Это может означать, что вам нужно реализовать методы для создания и удаления экземпляров классов в DLL;например, если вы хотите, чтобы DLL создавала / уничтожала экземпляры Base, тогда:

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

}

в exe:

int main()
{
  Base *base = Base::create();
  // blah
  Base::destroy(base);
}
0 голосов
/ 10 января 2011

В этом отношении нет никакой разницы между нормальной функцией в DLL и методом экземпляра класса DLL. Таким образом, они приведут к тому же поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...