Banuba SDK
Toggle main menu visibility
Loading...
Searching...
No Matches
libs
utils
bnb
utils
allocate_unique.hpp
1
#pragma once
2
3
#include <memory>
4
5
namespace
bnb
6
{
7
/**
8
* @addtogroup Utils
9
* @{
10
*/
11
12
template
<
typename
T,
typename
Alloc,
typename
D,
typename
... Args>
13
inline
std::unique_ptr<T, D> allocate_unique(Alloc alloc, Args&&... args)
14
{
15
using
traits = std::allocator_traits<Alloc>;
16
auto
ptr = traits::allocate(alloc, 1);
17
try
{
18
traits::construct(alloc, ptr, std::forward<Args>(args)...);
19
}
catch
(...) {
20
traits::deallocate(alloc, ptr, 1);
21
throw
;
22
}
23
24
25
return
std::unique_ptr<T, D>(
26
ptr,
27
[alloc = std::move(alloc)](
auto
p)
mutable
{
28
auto
ptr =
const_cast<
T*
>
(
reinterpret_cast<
const
T*
>
(p));
29
traits::destroy(alloc, ptr);
30
traits::deallocate(alloc, ptr, 1);
31
}
32
);
33
}
34
35
/** @} */
// endgroup utils
36
}
// namespace bnb
Generated by
1.17.0