почему это не компилируется?templated размещение нового и деструктора
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();
}
}
Что я, очевидно, хочу, чтобы достичь зовю размещение нового на необработанный массиве памяти (который должен вызвать конструктор КИ). Затем я хочу вызвать деструктор и конструктор элементов в массиве. Проблема заключается в том, что пункт является шаблон и поэтому, если я использую
Pool<FooBar>
компилятор ожидал найти «FooBar()» и «~ FooBar()» вместо «Т()» и «~ T()» , Есть ли какой-нибудь конкретный синтаксис для этого?
Я использую C++ 03 не C++ 11
+1 Буквально дословно то, что я собирался опубликовать (за исключением последнего 'new', вызов, где я был' новый (пункт + я) T(); ' – WhozCraig
спасибо, кажется, что GCC генерирует одну и ту же сборку для обоих (item + i) и (& item [i]), спасибо за назначение этого, возможно (item + i) более понятно читать. – GameDeveloper
@DarioOO Eh. они предпочитают то, что у вас есть. Я всегда был арифметическим любопытным парнем. – WhozCraig