2011-01-10 26 views
1

關於DLL和不同版本的運行時,有一些我不清楚。如果我實例化一個DLL類,會發生這種內存問題嗎?

我知道,如果比如,在我的DLL我有這樣的功能:

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

如果事情一直在我的main()函數中使用新的分配,這可能會導致一個問題。我不清楚的是以下內容:

說我有一個類中的DLL和我的實例它在主,然後嘗試做這一次,這仍然是一個問題?

例如: //在我的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類。

由於

回答

1

是的,這可能會導致問題。你需要做的只是在你分配的地方提供免費分配的內存。這可能意味着您需要實現方法來創建和刪除DLL中的類實例;例如,如果你想要的DLL創建/摧毀基地的情況下,則:

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

顯然使用某種資源的管理將減輕您的跟蹤繁瑣的負擔:在EXE

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

對象的生命週期自己。 – 2011-01-10 09:25:27

0

在這點上有在DLL正常功能和DLL的一個類的實例的方法沒有區別。所以他們會導致相同的行爲。

相關問題