作者gz ()
看板C_Sharp
标题Re: [问题] Wrapper Class for Unmanaged Code的Di …
时间Sat Feb 2 00:17:50 2008
※ 引述《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