gpt4 book ai didi

c++ - 为什么这个 MSDN 示例中的指针没有被删除?

转载 作者:行者123 更新时间:2023-11-28 00:12:49 25 4
gpt4 key购买 nike

我在看 this MSDN article其中讨论了如何通过计算机上的图形适配器进行枚举。在下面的代码示例中,我注意到 IDXGIAdapter * pAdapter 从未被明确删除。我业余的 C++ 大脑将此视为内存泄漏。有什么理由不删除吗?

std::vector <IDXGIAdapter*> EnumerateAdapters(void)
{
IDXGIAdapter * pAdapter;
std::vector <IDXGIAdapter*> vAdapters;
IDXGIFactory* pFactory = NULL;


// Create a DXGIFactory object.
if(FAILED(CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)))
{
return vAdapters;
}


for ( UINT i = 0;
pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND;
++i )
{
vAdapters.push_back(pAdapter);
}


if(pFactory)
{
pFactory->Release();
}

return vAdapters;

}

最佳答案

IDXGIAdapter 最终派生自 IUnknown,它是几乎所有 DirectX 相关类的基类(COM 接口(interface))。

因此,您通常不应显式调用它们的 delete。相反,您想使用 COM 方法 Release(),它会在内部减少对象的引用计数并在必要时自动删除它。将其视为一种智能指针。

在这个具体示例中,指针被插入到 std::vector 中,并返回这样一个 vector 。所以一定不要释放它,否则它会变成悬空指针。

关于c++ - 为什么这个 MSDN 示例中的指针没有被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142138/

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