Quick Links: |
#include <ball_countingallocator.h>
Public Types | |
typedef bsls::Types::size_type | size_type |
Public Member Functions | |
CountingAllocator (bslma::Allocator *basicAllocator=0) | |
virtual | ~CountingAllocator () |
virtual void * | allocate (size_type size) |
virtual void | deallocate (void *address) |
void | resetNumBytesTotal () |
size_type | numBytesTotal () const |
template<class TYPE > | |
void | deleteObject (const TYPE *object) |
void | deleteObject (bsl::nullptr_t) |
template<class TYPE > | |
void | deleteObjectRaw (const TYPE *object) |
void | deleteObjectRaw (bsl::nullptr_t) |
Static Public Member Functions | |
static void | throwBadAlloc () |
This class maintains a count of the total number of allocated bytes. The running byte count is initialized to 0 upon construction, is increased by the allocate
method, and may be reset to 0 by the resetNumBytesTotal
method. The deallocate
method appropriately decrement the byte count. The precise definition of byte count is described in the "Byte Count" section of the component-level documentation.
See Component ball_countingallocator
typedef bsls::Types::size_type bslma::Allocator::size_type [inherited] |
Reimplemented in bdlma::ConcurrentPoolAllocator.
ball::CountingAllocator::CountingAllocator | ( | bslma::Allocator * | basicAllocator = 0 |
) | [explicit] |
Create a counting allocator having an initial byte count of 0. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
virtual ball::CountingAllocator::~CountingAllocator | ( | ) | [virtual] |
Destroy this counting allocator.
virtual void* ball::CountingAllocator::allocate | ( | size_type | size | ) | [virtual] |
Return a newly allocated block of memory of (at least) the specified positive size
(bytes) and increment the byte count maintained by this counting allocator by the sum of the least multiple of bsls::AlignmentUtil::BSLS_MAX_ALIGNMENT
that is greater than or equal to size
and bsls::AlignmentUtil::BSLS_MAX_ALIGNMENT
. The behavior is undefined unless 0 <= size
. Note that the alignment of the address returned is the maximum alignment for any fundamental type defined for the calling platform, even if the supplied allocator guarantees only natural alignment.
Implements bslma::Allocator.
virtual void ball::CountingAllocator::deallocate | ( | void * | address | ) | [virtual] |
Return the memory at the specified address
back to this allocator and update the byte count maintained by this counting allocator appropriately. If address
is 0, this function has no effect. The behavior is undefined unless address
was allocated using this allocator and has not already been deallocated.
Implements bslma::Allocator.
void ball::CountingAllocator::resetNumBytesTotal | ( | ) |
Reset the byte count maintained by this counting allocator to 0.
size_type ball::CountingAllocator::numBytesTotal | ( | ) | const |
Return the byte count maintained by this counting allocator. The precise definition of byte count is described in the "Byte Count" section of the component-level documentation.
static void bslma::Allocator::throwBadAlloc | ( | ) | [static, inherited] |
DEPRECATED: Use bsls::BslExceptionUtil::throwBadAlloc
instead.
Throw std::bad_alloc
if exceptions are enabled or abort the program otherwise. Derived classes and helper functions will typically call this function when they are unable to satisfy an allocation request. This function never returns.
void bslma::Allocator::deleteObject | ( | const TYPE * | object | ) | [inherited] |
Destroy the specified object
based on its dynamic type and then use this allocator to deallocate its memory footprint. Do nothing if object
is a null pointer. The behavior is undefined unless object
, when cast appropriately to void *
, was allocated using this allocator and has not already been deallocated. Note that dynamic_cast<void *>(object)
is applied if TYPE
is polymorphic, and static_cast<void *>(object)
is applied otherwise.
void bslma::Allocator::deleteObject | ( | bsl::nullptr_t | ) | [inherited] |
This function has no effect. Note that it exists to support calling deleteObject
will a null pointer literal, that would otherwise not deduce to a pointer type for the method above. As calls to deleteObject
with (typed) null pointer values have well-defined behavior, it should also support calls with a null pointer literal.
void bslma::Allocator::deleteObjectRaw | ( | const TYPE * | object | ) | [inherited] |
Destroy the specified object
and then use this allocator to deallocate its memory footprint. Do nothing if object
is a null pointer. The behavior is undefined unless object
was allocated using this allocator, is not a secondary base class pointer -- i.e., the address is (numerically) the same as when it was originally dispensed by this allocator, and has not already been deallocated.
void bslma::Allocator::deleteObjectRaw | ( | bsl::nullptr_t | ) | [inherited] |
This function has no effect. Note that it exists to support calling deleteObjectRaw
will a null pointer literal, that would otherwise not deduce to a pointer type for the method above. As calls to deleteObjectRaw
with (typed) null pointer values have well-defined behavior, it should also support calls with a null pointer literal.