Changeset View
Changeset View
Standalone View
Standalone View
src/support/allocators/zeroafterfree.h
Show All 16 Lines | struct zero_after_free_allocator : public std::allocator<T> { | ||||
typedef std::allocator<T> base; | typedef std::allocator<T> base; | ||||
typedef typename base::size_type size_type; | typedef typename base::size_type size_type; | ||||
typedef typename base::difference_type difference_type; | typedef typename base::difference_type difference_type; | ||||
typedef typename base::pointer pointer; | typedef typename base::pointer pointer; | ||||
typedef typename base::const_pointer const_pointer; | typedef typename base::const_pointer const_pointer; | ||||
typedef typename base::reference reference; | typedef typename base::reference reference; | ||||
typedef typename base::const_reference const_reference; | typedef typename base::const_reference const_reference; | ||||
typedef typename base::value_type value_type; | typedef typename base::value_type value_type; | ||||
zero_after_free_allocator() throw() {} | zero_after_free_allocator() noexcept {} | ||||
zero_after_free_allocator(const zero_after_free_allocator &a) throw() | zero_after_free_allocator(const zero_after_free_allocator &a) noexcept | ||||
: base(a) {} | : base(a) {} | ||||
template <typename U> | template <typename U> | ||||
zero_after_free_allocator(const zero_after_free_allocator<U> &a) throw() | zero_after_free_allocator(const zero_after_free_allocator<U> &a) noexcept | ||||
: base(a) {} | : base(a) {} | ||||
~zero_after_free_allocator() throw() {} | ~zero_after_free_allocator() noexcept {} | ||||
template <typename _Other> struct rebind { | template <typename _Other> struct rebind { | ||||
typedef zero_after_free_allocator<_Other> other; | typedef zero_after_free_allocator<_Other> other; | ||||
}; | }; | ||||
void deallocate(T *p, std::size_t n) { | void deallocate(T *p, std::size_t n) { | ||||
if (p != nullptr) memory_cleanse(p, sizeof(T) * n); | if (p != nullptr) memory_cleanse(p, sizeof(T) * n); | ||||
std::allocator<T>::deallocate(p, n); | std::allocator<T>::deallocate(p, n); | ||||
} | } | ||||
}; | }; | ||||
// Byte-vector that clears its contents before deletion. | // Byte-vector that clears its contents before deletion. | ||||
typedef std::vector<char, zero_after_free_allocator<char>> CSerializeData; | typedef std::vector<char, zero_after_free_allocator<char>> CSerializeData; | ||||
#endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H | #endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H |