Tob*_*ias 8 c++ arrays memory-management memory-pool delete-operator
我想知道如何将C++ - FAQ-lite的第11.14节适用于数组.
基本上,我想要这样的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚声明和调用它的正确语法operator delete[] (pool).有人可以帮忙吗?
是不可能的。Bjarne 认为,你永远无法正确地找出正确的池。他的解决方案是:您必须手动调用所有析构函数,然后找出正确的池才能手动释放内存。
参考:
Bjarne 的常见问题解答:是否存在展示位置删除?
相关 C++ 标准部分:
3.7.3.2.2 删除表达式仅考虑带有 size_t 类型参数的成员运算符删除函数。
5.3.5.1 删除表达式语法不允许额外的参数。