Вам необходимо создать пользовательское средство удаления , чтобы std::unique_ptr
и std::shared_ptr
знали особый способ удаления памяти.Примерно так:
struct explicit_access_deleter
{
void operator()(EXPLICIT_ACCESS* pItem) const
{
if(pItem)
LocalFree(pItem);
}
};
Затем вы можете предоставить функции производителя для вызова функции выделения и использования вашего специального средства удаления:
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);
}