1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2015 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 #ifndef BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
7 #define BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
9 #include "support/cleanse.h"
15 struct zero_after_free_allocator
: public std::allocator
<T
> {
16 // MSVC8 default copy constructor is broken
17 typedef std::allocator
<T
> base
;
18 typedef typename
base::size_type size_type
;
19 typedef typename
base::difference_type difference_type
;
20 typedef typename
base::pointer pointer
;
21 typedef typename
base::const_pointer const_pointer
;
22 typedef typename
base::reference reference
;
23 typedef typename
base::const_reference const_reference
;
24 typedef typename
base::value_type value_type
;
25 zero_after_free_allocator() noexcept
{}
26 zero_after_free_allocator(const zero_after_free_allocator
& a
) noexcept
: base(a
) {}
28 zero_after_free_allocator(const zero_after_free_allocator
<U
>& a
) noexcept
: base(a
)
31 ~zero_after_free_allocator() noexcept
{}
32 template <typename _Other
>
34 typedef zero_after_free_allocator
<_Other
> other
;
37 void deallocate(T
* p
, std::size_t n
)
40 memory_cleanse(p
, sizeof(T
) * n
);
41 std::allocator
<T
>::deallocate(p
, n
);
45 // Byte-vector that clears its contents before deletion.
46 typedef std::vector
<char, zero_after_free_allocator
<char> > CSerializeData
;
48 #endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H