diff --git a/include/rapidjson/allocators.h b/include/rapidjson/allocators.h index 04fab68..0d7b664 100644 --- a/include/rapidjson/allocators.h +++ b/include/rapidjson/allocators.h @@ -104,9 +104,6 @@ public: MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0) { - if (!baseAllocator_) - ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator()); - AddChunk(chunk_capacity_); } //! Constructor with user-supplied buffer. @@ -216,6 +213,8 @@ private: /*! \param capacity Capacity of the chunk in bytes. */ void AddChunk(size_t capacity) { + if (!baseAllocator_) + ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator()); ChunkHeader* chunk = reinterpret_cast(baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity)); chunk->capacity = capacity; chunk->size = 0; diff --git a/include/rapidjson/internal/stack.h b/include/rapidjson/internal/stack.h index 24ad4bc..b7d7449 100644 --- a/include/rapidjson/internal/stack.h +++ b/include/rapidjson/internal/stack.h @@ -37,8 +37,6 @@ public: // Do it lazily when first Push() -> Expand() -> Resize(). Stack(Allocator* allocator, size_t stackCapacity) : allocator_(allocator), ownAllocator_(0), stack_(0), stackTop_(0), stackEnd_(0), initialCapacity_(stackCapacity) { RAPIDJSON_ASSERT(stackCapacity > 0); - if (!allocator_) - ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator()); } #if RAPIDJSON_HAS_CXX11_RVALUE_REFS @@ -140,9 +138,11 @@ private: void Expand(size_t count) { // Only expand the capacity if the current stack exists. Otherwise just create a stack with initial capacity. size_t newCapacity; - if (stack_ == 0) + if (stack_ == 0) { + if (!allocator_) + ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator()); newCapacity = initialCapacity_; - else { + } else { newCapacity = GetCapacity(); newCapacity += (newCapacity + 1) / 2; }