4
为什么不能编译?模板布局新建和分解器
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()”和“〜T()” 。 是否有任何特定的语法来做到这一点?
我用C++ 03没有C++ 11
+1字面上我逐字逐字地发布(除了最后一个'new',调用,我有'new(item + i)T();' – WhozCraig 2013-03-02 10:04:28
感谢,似乎GCC为(item + i)和(&item [i])生成了相同的程序集,谢谢你的指定,可能(item + i)更清晰。 – GameDeveloper 2013-03-02 10:14:41
@DarioOO Eh。To each他们自己的,有些更喜欢你的方式,我总是一个指针算术的人, – WhozCraig 2013-03-02 10:16:53