为什么这个MSDN示例中的指针没有被删除?
Why is the pointer in this MSDN example not deleted?
我正在看一篇MSDN文章,它讨论了如何通过计算机上的图形适配器进行枚举。在下面的代码示例中,我注意到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接口)。
delete
。相反,您希望使用COM方法Release()
,该方法在内部减少对象的引用计数,并在必要时自动删除它。把它想象成一种智能指针。
在这个具体的例子中,指针被插入到一个std::vector
容器中,并返回一个这样的向量。所以你不能释放它,否则它会变成一个悬空指针。
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存