我最近看到的智能指針和他們的陷阱一個PowerPoint,它有這個幻燈片(幾乎沒有評論或解釋:此智能指針使用有什麼問題?
在背景:特別是_com_ptr_t,智能指針的COM接口,處理的AddRef /釋放如由_COM_SMARTPTR_TYPEDEF
宏創建*
錯誤:
IObjectPtr spObj;
for (int i(0); i<MAX; i++)
{
//passed as actual , no release of previous ptr value
spOtherObj->get_Obj(&spObj);
}
下一張幻燈片聲稱,它是好的,如果你把spObj
循環的範圍內:
右:
for (int i(0); i<MAX; i++)
{
IObjectPtr spObj;
//passed as actual , no release of previous ptr value
spOtherObj->get_Obj(&spObj);
}
我研究這個,仍然無法弄清楚他們在說什麼。
第一個問題與第二個問題解決了什麼問題?
我猜,在更全面的背景下,正確/錯誤代碼是這樣:
雖然我可能是錯誤的,我的假設
_COM_SMARTPTR_TYPEDEF(ICalendar, __uuidof(ICalendar))
void get_Calendar(ICalendarPtr* pCalendar)
{
*pCalendar.CreateInstance(__uuidof(Calendar));
}
void WrongMethod(void)
{
ICalendarPtr spCalendar;
for (int i(0); i<MAX; i++)
{
//passed as actual , no release of previous ptr value
get_Calendar(&spCalendar);
}
}
它也沒有幫助,沒有上下文來說明get_Obj是在做什麼。 –
指針始終是智能的;) – lordkain
這是關於COM對象的[_com_ptr_t](http://msdn.microsoft.com/en-us/library/vstudio/417w8b3b.aspx)智能指針的上下文。 – abelenky