我還不是很瞭解COM,和COM somhow谷歌搜索沒有發現在所有的COM(可能是因爲它搜索.COM地址,而不是)。COM,刪除內存而不是調用Release()
我們正在使用視頻捕捉硬件。其SDK允許我們在捕獲幀時註冊回調。對象接口被作爲參數傳遞給該回調過去了,我們可以通過查詢該對象獲取大的緩衝器地址(所捕獲的幀中的像素)和其他信息。現在
,它看起來像調用Release()並不真正刪除存儲,但會降低引用計數,當計數到達0,則將其刪除,對不對?那麼,關於上面提到的那個大緩衝區地址,如何使用「delete」關鍵字「刪除」緩衝區?
看來,我們的節目(不是我寫的,誰寫程序的人退出公司)副本的指針緩衝區爲若干類,但永遠不會調用的任何版本()回調。後來,緩衝區在類中被「刪除」了,似乎Release()幀接口對象也刪除了緩衝區,但它們是一樣的嗎?
COM以某種方式計算引用,但如果用戶代碼只是刪除內存對不起,如果我的問題是晦澀總之,是安全的刪除是從一個COM對象得到一個緩衝
簡化代碼:。可疑情況
void mycallback(IFrame f)
{
char* buffer;
f->GetBuffer(buffer);
MyClass m(buffer);
...
}
MyClass::DeleteBuffer()
{
delete m_buffer;
}
什麼是IFrame的::的GetBuffer? – Andrey
嘗試搜索「Microsoft組件對象模型」。即使「編程COM + +」提出的結果。當您鍵入「COM」時,您是否期望谷歌閱讀您的想法? – paddy
在一個模塊中分配內存並在另一個模塊中銷燬是一個壞主意。將IFrame :: ReleaseBuffer(char * data)添加到IFrame接口以正確銷燬分配的緩衝區 – pogorskiy