Я что-то смущен. Скажем, у меня есть произвольный дистрибутор С++ - скажем, что-то вроде этого:
template<class T>
struct my_allocator
{
template<class Other>
struct rebind { typedef my_allocator<Other> other; };
// [other members here]
};
Теперь рассмотрим следующий код (прочитайте комментарии):
typedef my_allocator<int> Alloc;
Alloc alloc = get_my_allocator(); // assume this works properly
long *const p = Alloc::rebind<long>::other(alloc).allocate(1, NULL);
// Notice that the rebound allocator for 'long' is now destroyed
// Can a NEW rebound allocator for 'long' deallocate the memory from the old one?
Alloc::rebind<long>::other(alloc).deallocate(p, 1);
// i.e., does the 'int' allocator 'alloc' keep alive the 'long' memory pool too?
В какой момент может быть освобожден резервный пул хранения?
Или, другими словами: какой распределитель разделяет право собственности на какой пул памяти?
Я всегда предполагал, что без выделения второй мысли, что распределители типа одинакового типа разделяли совместное владение собственными пулами памяти, но теперь мне пришло в голову, что они также могут делиться собственностью пул памяти за всеми распределителями отскока, даже если они управляют совершенно разными типами.
Должны ли распределители типов отскока "поддерживать" пулы памяти друг друга до тех пор, пока все они не будут уничтожены?
Если для С++ 03 и С++ 11 ответ отличается, объясните, как и разница между ними.