[英]Should destructors be exported in Windows DLL Libraries?
在生成Windows DLL動態庫時,系統會要求您聲明應導出哪些函數,以便某些函數可能保留為DLL專用而其他應用程序無法訪問。
我還沒有看到有關是否需要導出析構函數或是否由編譯器或Windows內核自動處理的任何內容? 如果我不導出析構函數並且它們動態分配我聲明為可導出的類,如果不導出析構函數,它們是否可以成功調用delete?
通常,任何帶有構造函數的類都應該導出析構函數。
話雖這么說,但有幾件事要警惕......
如果您在Windows上構建,則需要注意將VS版本與庫混合。 如果您只是將您的庫作為DLL分發,那么導出構造函數和析構函數是個壞主意。 問題出在C ++運行時。 幾乎需要處理內存分配的相同運行時需要處理釋放。 例如,當您嘗試在VS 2008中使用在VS 2005中編譯的庫時,這是“壞事”的首要原因。
解決方案是提供工廠方法來創建類(分配由您編譯的運行時處理)以及刪除/破壞類的方法(因此解除分配在同一運行時發生)。
如果析構函數不可用但需要,編譯器應該生成錯誤。 作為一般規則,如果導出構造函數,那么析構函數也應該是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.