雖然這似乎是一個非常普遍的問題,但我並沒有收穫太多的信息:如何在內存分配的DLL邊界之間創建一個安全的接口?跨DLL的內存/堆管理
這是很衆所周知,
// in DLL a
DLLEXPORT MyObject* getObject() { return new MyObject(); }
// in DLL b
MyObject *o = getObject();
delete o;
肯定會導致死機。 但是因爲像上面那樣的交互 - 正如我敢說 - 並不罕見,所以必須有一種方法來確保安全的內存分配。
當然,一個能提供
// in DLL a
DLLEXPORT void deleteObject(MyObject* o) { delete o; }
但也許有更好的方法(例如smart_ptr?)。我在閱讀關於使用自定義分配器處理STL容器時也是如此。
所以我詢問更多的是文章和/或文獻處理這一主題一般的指針。是否有特殊的謬論需要注意(異常處理?),並且這個問題僅限於DLL或者是否也是「共享對象」造成的?
Linux中的共享庫也受到影響。 – sergiom 2010-02-15 13:36:00