我最近看到的智能指针和他们的陷阱一个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