[唯一]指针的分配器

问题描述 投票:1回答:1

我对该问题缺少文档感到有些困惑,因此在这里我可能完全偏离了轨道:

当我分配内存以便通过已修改其值的唯一指针返回对象时,应该使用什么分配器?

文档说我可以提供MIDL_user_allocate()MIDL_user_free(),而存根将使用它们-但是在CLSCTX_INPROC_SERVER中没有意义,因为调用对象将需要使用(并因此解析)我的分配器。

因此,我应该在这里分配内存,以便如果将DL L加载到SVCHOST中,存根代码可以正确释放列表,并且如果需要,应用程序仍可以直接使用DLL。] >

idl:

HRESULT GetItems([out] DWORD *count, [out, size_is(,count)] ITEM **items);

cpp:

HRESULT STDMETHODCALLTYPE impl::GetBuffer(DWORD *count, ITEM **items)
{
    *count = 0;
    *items = reinterpret_cast<ITEM *>(/* ??? */);
    if(!*items)
        return E_OUTOFMEMORY;
    *count = 5;
    /* fill in items */
    return S_OK;
}

我对此问题缺少文档感到有些困惑,所以我在这里可能完全偏离了轨道:当我分配内存以通过具有其值的唯一指针返回对象时...]]

memory-management com
1个回答
0
投票

来自here

输出参数必须由被叫人分配;它们由调用者使用标准COM任务内存分配器释放。

© www.soinside.com 2019 - 2024. All rights reserved.