gpt4 book ai didi

c++ - ATL CComPtr 附加、分离和析构函数

转载 作者:行者123 更新时间:2023-11-27 23:02:09 25 4
gpt4 key购买 nike

我觉得..Attach 和 Detach 不会改变引用计数。但是 CComPtr 的析构函数在它包含的指针上调用释放。

那么有没有必要在一个use attach的时候每次都调用detach呢?...

{
CComPtr<IObj> pPtr;
pPtr.Attach(pPtr1);
.....//No detach on pPtr

最佳答案

正如您所提到的,Attach/Detach 不会影响引用计数器,这是设计使然。因此,当您有特殊需要跳过添加引用时,您将使用它们。否则,您将以更自然的方式(构造函数、赋值运算符等)初始化指针。

您对 Attach 的特殊需求通常是为了补偿已添加的外部引用。这样您的 CComPtr 析构函数就会在需要时正确释放它。

所以,不,您不必将 AttachDetach 配对。必要时,您应该不会首先使用 Attach。

例如,附加:

{
// We have an oustanding reference on pRawFoo we want to safely compensate for
CComPtr pFoo;
pFoo.Attach(pRawFoo); // No effect on counter, but since here we would release
// the reference going out of scope
// ...
} // ~CComPtr releases the reference as intended

Attach 中不需要:

{
// External pRawFoo is in proper balance in terms of reference count
CComPtr pFoo;
pFoo = pRawFoo; // No need in Attach, pFoo adds a reference
// ...
} // ~CComPtr releases the reference as intended

关于c++ - ATL CComPtr 附加、分离和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com