我最近看到了一份关于智能指针及其陷阱的PowerPoint演示文稿,其中有这张幻灯片(几乎没有评论或解释):
错误:
下一张幻灯片声称,如果你将
正确的:
我已经学习了这个,但仍然无法弄清他们在谈论什么。
第一个问题被第二个解决的问题是什么?
我猜,在更全面的上下文中,正确/错误的代码应该是这样的:
虽然我的假设可能是错误的
上下文:具体来说,_com_ptr_t是用_COM_SMARTPTR_TYPEDEF
宏创建的用于处理AddRef/Release的COM接口的智能指针。
错误:
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
在做什么。 - Collin Dauphinee