我目前正在学习COM和下面的代码混淆了我。成员方法如何删除对象?
STDMETHODIMP _(ULONG) ComCar::Release()
{
if(--m_refCount==0)
delete this; // how could this "suicide" deletion be possible?
return m_refCount;
}
我想知道如何删除其成员方法内的对象实例?所以,我做了以下实验:
class A
{
public:
void Suicide(void);
void Echo(void);
char name;
};
void A::Echo(void)
{
::printf("echo = %c\n",name);
}
void A::Suicide(void)
{
delete this;
}
int main(void)
{
A a;
a.name='a';
a.Suicide(); //failed
}
和执行并未能在a.Suicide()。调试报告中有一些“Debug Assertion Failed”。有人可以点亮我吗?因为我完全是COM上的新手。
一个相关的线程是在这里:Question about COM Release() method
而简单的修复方法当然是返回0。 – GManNickG
谢谢,迈克尔,既然你提到“动态分配”,我猜测是否有一些相反的“静态分配”?它是什么和有什么区别?也许很难用一句话来解释它。你能否给我一些参考资料供进一步研究?非常感谢。 :D – smwikipedia
@GMan:只是想澄清你的意思:'if(--m_refCount == 0){delete this;返回0; }返回m_refCount;'。你不能把return语句改成'return 0;'。 – Dan