智能指针在最终版本中明确发布
Smart pointers release in FinalRelease explicitly
我正在处理的某些项目类看起来像这样
class ATLCOMCLASS<CComObjectRootEx<ATLCOMCLASS> >
{
ISomeInterfacePtr p;
/*some stuff*/
void FinalRelease()
{
p = NULL;
}
}
ISomeInterfacePtr
由 _COM_SMARTPTR_TYPEDEF
定义。我不明白为什么它需要显式执行p = NULL
这意味着p->Release()
,如果此操作将自动在 ATLCOMCLASS
dtor 中进行。
你能解释一下我吗?
从技术上讲,它不必在代码中的该点执行p = NULL
,也不必在任何时候显式执行,因为析构函数将释放智能指针,如您所指出的。但是,显式释放它可以让你更好地控制它何时发生,这可能是有用的。
根据ISomeInterface
、程序和其他因素的要求,在销毁this
之前释放p
可能满足某些程序条件。特别是,如果FinalRelease()
是由另一个方法而不是 dtor 调用的,则清理发生在其他地方,并且可能具有非常不同的触发器。也可以清理它,然后在某种重置或任何其他数量的序列中重新创建一些资源。
要弄清楚为什么这很有用,假设这不是一个错误,你需要备份可能的程序流,看看发生了什么。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 共享指针,C 版本的原子操作
- 在发布版本中删除类指针会导致内存问题
- 无法使用 std::function 作为参数类型(需要函数指针版本)宁愿像 STL 这样的模板,但随后它无法推断参数
- 是否有支持右值的 ref 指针版本
- C++-什么是指针数组版本的temp.pushback(temp[i])
- Visual Studio中的指针和发布版本
- 如何让编译器在指针上选择模板的静态数组版本
- 智能指针在最终版本中明确发布
- 从指针到具有常量和非常量版本的成员函数的模板参数推导
- 公开begin()和end()的const和非const版本,以使用智能指针迭代成员向量
- 为什么即使在调试版本中,VS 和 Windbg 也会"this"指针打印为"0xcccccccc"?
- Strdup指针版本需要一个临时指针
- 指针在发布版本中丢失