關于DLL中對象的動態創建與刪除的問題
最近有看到一些文章討論怎樣輕松的使用DLL,其中有一個錯誤,那就是在DLL中創建的對象未在DLL中刪除,如下示:





























上面的做法貌似可以做到自動刪除動態生成的對象,但,只有DLL和用戶都動態鏈接C/C++運行庫時它才會運行正確,否則,創建和刪除會在不同的堆??臻g進行,從而導致錯誤 。
所以還是老實的在提供一個DLLDelete()用于刪除在DLL中生成的對象。
C++, 3DGame
最近有看到一些文章討論怎樣輕松的使用DLL,其中有一個錯誤,那就是在DLL中創建的對象未在DLL中刪除,如下示:
恩,沒有試過,但是怎么才是使DLL和用戶都動態鏈接C/C++運行庫那,哈哈!來電詳細的解釋o!
謝謝!
歡迎加入:msn 的C++群: group2041@xiaoi.com 回復 更多評論
就是正在創建的DLL和使用這個DLL的用戶都靜態而不是動態鏈接c/c++運行庫 回復 更多評論
老兄,我用的不是auto_ptr,而是shared_ptr, 我的做法并沒有錯。另外,在復雜的系統中,手工管理內存總是有點危險,而shared_ptr已被列為tr1標準,我們不要停留在原始社會,還是用點新技術吧! 回復 更多評論
呵呵,DLL中使用shared_ptr的說明:http://m.shnenglu.com/eXile/archive/2007/04/23/22637.html 回復 更多評論
同意作者的觀點。
提供一個DllFree();
然后自己寫一個 dll_auto_ptr:
struct dll_auto_ptr
{
...
~dll_auto_ptr<>
{
DllFree(p);
}
...
private:
}; 回復 更多評論
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|