我想知道如何使section 11.14 of the C++-FAQ-lite适应数组。
基本上,我想要这样的东西:
class Pool {
public:
void* allocate(size_t size) {...}
void deallocate(void* p, size_t size) {...}
};
void* operator new[](size_t size, Pool& pool) { return pool.allocate(size); }
void operator delete[](void* p, size_t size, Pool& pool) { pool.deallocate(p, size); }
struct Foo {...};
int main() {
Pool pool;
Foo* manyFoos = new (pool) Foo [15];
/* ... */
delete [] (pool) manyFoos;
}
但是,我无法找出声明和调用此operator delete[] (pool)
的正确语法。有人可以帮忙吗?
答案 0 :(得分:2)
首先在各个对象上调用dtors,然后使用:
for (int i = 0; i < 15; ++i) manyFoos[ i ]->~Foo();
operator delete[] (manyFoos, pool);
您可以再次阅读整个FAQ项目,您将在那里找到它。
答案 1 :(得分:1)
这是不可能的。 Bjarne认为你永远不会正确找出正确的游泳池。他的解决方案是:您必须手动调用所有析构函数,然后找出正确的池才能手动释放内存。
参考文献:
Bjarne的常见问题:Is there a placement delete?
相关的C ++标准部分:
3.7.3.2.2对于删除表达式,只考虑使用size_t类型参数的成员操作符删除函数。
5.3.5.1删除表达式语法不允许使用额外的参数。