我目前正在學習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