下記のようなメンバ関数があるのですが、期待通りの動作をしてくれません。
//template<typename, typename>class Block;
//typedef T ValueType;
//typedef Block<T, std::allocator<T> > BlockType;
//std::allocator<T> &value_allocator;
//std::allocator<Block<T, std::allocator<T> > > &block_allocator;
BlockType *allocate_one(ValueType &value){ ValueType *v = value_allocator.allocate(1); value_allocator.construct(v, value); BlockType *b = block_allocator.allocate(1); block_allocator.construct(b, BlockType(v, 1)); /**/std::printf("%p, %p", v, b); return b; }・value_allocator.allocateが毎回同じ値を返す。(初めてblock_allocator.allocateを呼ぶときの返り値よりも0x10だけ小さいアドレスを毎回返してくる)
・value_allocator.constructによってvが指してる値は変わらない。
gccとbcc32で試しましたが、どちらもこのような動作をします。
block_allocatorは普通に動くんですが。
なぜこうなるのか全くわからないです。
お手数ですが御教授願います。