gpt4 book ai didi

c++ - 在 C++ 中将 unique_ptr 和 shared_ptr 与函数参数一起使用

转载 作者:行者123 更新时间:2023-11-30 01:37:01 28 4
gpt4 key购买 nike

我正在调用 GetExplicitEntriesFromAcl 等 Windows 函数,这些函数代表我动态分配内存(数组),必须通过调用 LocalFree 释放内存。

ULONG EntryCount;
EXPLICIT_ACCESS* pItem = nullptr;
ULONG EntryCount;
status = GetExplicitEntriesFromAcl(pACL, &EntryCount, &pItem);
...
...
LocalFree(pItem);

我可以将 pItem 声明为 std::shared_ptr 的一个实例并且仍然让 GetExplicitEntriesFromAcl 为我分配它吗?

如何?

最佳答案

您必须创建一个自定义删除器,以便std::unique_ptrstd::shared_ptr 知道删除内存的特殊方法.像这样:

struct explicit_access_deleter
{
void operator()(EXPLICIT_ACCESS* pItem) const
{
if(pItem)
LocalFree(pItem);
}
};

然后您可以提供maker 函数 来调用分配函数并使用您的特殊删除器:

std::unique_ptr<EXPLICIT_ACCESS, explicit_access_deleter>
make_explicit_access_unique_ptr(ULONG EntryCount)
{
EXPLICIT_ACCESS* pItem = nullptr;
int status = GetExplicitEntriesFromAcl(pACL, &EntryCount, &pItem);
// do some error checking here ...
return std::unique_ptr<EXPLICIT_ACCESS, explicit_access_deleter>(pItem);
}

std::shared_ptr<EXPLICIT_ACCESS>
make_explicit_access_shared_ptr(ULONG EntryCount)
{
return make_explicit_access_unique_ptr(EntryCount);
}

关于c++ - 在 C++ 中将 unique_ptr 和 shared_ptr 与函数参数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575629/

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