我試圖從DLL中導出類。我讀了這樣的這篇文章:http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL如何處理DLL導出的接口中的析構函數
「成熟」的做法表明,該抽象類使用,所以我有:
// Header
class IFoo{
public:
virtual int getBar() = 0;
}
class Foo: public IFoo {...}
DLLEXPORT IFoo* Create();
DLLEXPRT void Free(IFoo* inst);
//DLL cpp
IFoo* Create(){ return new Foo; }
void Free(IFoo* inst){ delete inst; }
令我百思不解:如果我沒有虛析構函數,那麼delete inst
將不會調用Foos析構函數並可能泄漏內存。我應該如何處理?這篇文章沒有給出答案。
使用virtual ~IFoo(){}
是不可能的,因爲這增加了的IFoo實現這會導致問題(內聯虛函數的文章中的答案說明問題)和virtual ~IFoo() = 0;
失敗,鏈接錯誤對未定義的符號~IFoo
什麼是安全的路要走?免費/發佈功能應該如何實施?
不要讓事情變得更復雜得多,他們需要成爲。只需在IFoo中提供一個虛擬析構函數並導出其定義。 –
您可以改爲將虛擬Free()函數添加到接口。將* inst *投射到Foo *是另一種方式,不是更好。 –
@HansPassant:爲什麼不簡單地使用虛擬析構函數? –