Я хотел бы знать, как адаптировать 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)
. Может ли кто-нибудь помочь здесь?
Извините, я не понимаю. Как этот оператор удаляет массив 'manyFoos'? И как компилятор знает, чтобы вызвать 'operator delete []', а не 'operator delete'? – Tobias
@Tobias: У меня была опечатка. Фиксированная почта. – dirkgently
@Tobias: При использовании формы размещения вам нужно сделать то, что компилятор в противном случае сделает для вас автоматически - 1) вызвать dtor для объекта (ов) 2) освободить память. Первая строка кода заботится о # 1. Теперь вторая строка позаботится о том, чтобы освободить ту часть пула, откуда пришли ваши объекты массива. – dirkgently