Шаблонное размещение нового и деструктора

почему то не компилируется?

template <typename T>
class Pool{

char Buff[sizeof(T)*256];

public:

Pool(){
T* item = reinterpret_cast<T*>(&Buff[0]);
for(int i =0 ; i<256;i++)
item[i] = new(&item[i]) T();
}

~Pool(){
T* item = reinterpret_cast<T*>(&Buff[0]);
for(int i =0 ; i<256;i++)
item[i] -> ~ T();
}

void reset(unsigned int i){
T* item = reinterpret_cast<T*>(&Buff[0]);
item[i]->~T();
item[i]->T();
}
}

То, что я, очевидно, хочу достичь, это вызвать размещение нового в массиве сырой памяти (это должно вызвать конструктор ок). Затем я хочу вызвать деструктор и конструктор элементов в массиве. Проблема в том, что Item является шаблоном, и поэтому, если я использую

Pool<FooBar>

компилятор ожидает найти «FooBar ()» и «~ FooBar ()» вместо «T ()» и «~ T ()».
Есть ли какой-то конкретный синтаксис для этого?

я использую C ++ 03 не C ++ 11

4

Решение

Ваш синтаксис не совсем правильный. Следующее должно сделать трюк:

Pool() {
T* item = reinterpret_cast<T*>(&Buff[0]);
for(int i = 0; i < 256; i++)
new(&item[i]) T();
}

~Pool() {
T* item = reinterpret_cast<T*>(&Buff[0]);
for (int i = 0; i < 256; i++)
item[i].~T();
}

void reset(unsigned int i) {
T* item = reinterpret_cast<T*>(&Buff[0]);
item[i].~T();
new(&item[i]) T();
}
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]