// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #ifndef BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H #define BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H #include "support/cleanse.h" #include #include template struct zero_after_free_allocator : public std::allocator { // MSVC8 default copy constructor is broken typedef std::allocator base; typedef typename base::size_type size_type; typedef typename base::difference_type difference_type; typedef typename base::pointer pointer; typedef typename base::const_pointer const_pointer; typedef typename base::reference reference; typedef typename base::const_reference const_reference; typedef typename base::value_type value_type; zero_after_free_allocator() throw() {} zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) {} template zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) { } ~zero_after_free_allocator() throw() {} template struct rebind { typedef zero_after_free_allocator<_Other> other; }; void deallocate(T* p, std::size_t n) { if (p != NULL) memory_cleanse(p, sizeof(T) * n); std::allocator::deallocate(p, n); } }; // Byte-vector that clears its contents before deletion. typedef std::vector > CSerializeData; #endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H