【发布时间】:2013-11-15 21:42:44
【问题描述】:
我最近看到了一个关于智能指针及其陷阱的 PowerPoint,其中有这张幻灯片(几乎没有评论或解释:
在上下文中:特别是 _com_ptr_t,用于处理 AddRef/Release 的 COM 接口的智能指针,由 _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);
}
我研究过这个,但仍然无法弄清楚他们在说什么。
第一个被第二个解决的问题是什么?? p>
我猜想,在更全面的情况下,正确/错误的代码看起来像:
虽然我的假设可能是错误的
_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正在做什么的上下文也无济于事。 -
指针总是很聪明;)
-
这里的上下文都是关于_com_ptr_t 指向 COM 对象的智能指针。
标签: c++ com smart-pointers