为什么不编译?
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();
}
}
我显然想要实现的是在原始内存数组上调用new(应该调用构造函数ok)。然后我想调用数组中的析构函数和项的构造函数。问题是Item是模板,所以如果我使用
Pool<FooBar>
编译器期望找到“FooBar()”和“~FooBar()”而不是“T()”和“~T()”。 是否有任何特定的语法来做到这一点?
我正在使用 C ++ 03 而不是C ++ 11
答案 0 :(得分:6)
你的语法不太正确。以下应该可以解决问题:
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();
}