Re: [問題] Wrapper Class for Unmanaged Code的Di …
※ 引述《sedc (大招出盡)》之銘言:
: 我用C++/CLI寫了個Wrapper Class來包裝一個C++的CLASS C,大致如下:
: public ref class MgdC
: {
: public:
: MgdC();
: ~MgdC();
: protected:
: !MgdC();
: private:
: C* m_pC;
: };
: 其中 ~MgdC()的內容是
: ~MgdC()
: {
: if(m_pC!= NULL)
: delete m_pC;
: }
: 最後編出來dll檔後,~MgdC()則會變成Dispose()
: 但是我在C#的CODE中呼叫Mgd.Dispose()時,會發生Access Violation Exception,
: 說「嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。」
: 用google查了一下,會發生Access Violation Exception的類似情況好像都是沒有實作
: Dispose(),但是到了C++/CLI後應該是不需要再另外實作了吧,因為Compiler會幫它編出
: 一個Dispose()來呼叫~MgdC()或!MgdC()。 所以目前還是不知道問題出在哪裡,還請板
: 上的高手前輩們能解答 感激不盡 謝謝
實在是看不懂@@ 你都知道~MgdC()就是Dispose()
那怎麼會說不需要再另外實作Dispose() @@
~MgdC()在C#是Finalizer, 而在C++/CLI正是Dispose()
Access Violation Exception應該很容易理解, 就是不合法的記憶體存取,
而不是沒有實作Dispose().
事實上在C++/CLI寫wrapper class 不實作Dispose pattern等於是完蛋.
所以問題出在其他地方, 也許是你不小心刪了物件兩次?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.170.18