Tôi muốn biết cách điều chỉnh section 11.14 of the C++-FAQ-lite thành các mảng.Làm thế nào để bạn khai báo và sử dụng toán tử pool bị quá tải xóa?
Về cơ bản, tôi muốn một cái gì đó như thế này:
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;
}
Tuy nhiên, tôi đã không thể tìm ra cú pháp chính xác để khai báo và gọi operator delete[] (pool)
này. Ai có thể giúp đỡ ở đây?
Xin lỗi, tôi không hiểu. Câu lệnh này xóa mảng 'manyFoos' như thế nào? Và làm thế nào để trình biên dịch biết gọi 'toán tử delete []', không phải 'toán tử delete'? – Tobias
@Tobias: Tôi bị lỗi đánh máy. Đã sửa bài đăng. – dirkgently
@Tobias: Khi sử dụng biểu mẫu vị trí, bạn cần phải làm những gì trình biên dịch khác làm cho bạn tự động - 1) gọi dtor trên (các) đối tượng 2) giải phóng bộ nhớ. Dòng mã đầu tiên sẽ xử lý # 1. Bây giờ, dòng thứ hai, chăm sóc giải phóng phần đó của 'pool', nơi các đối tượng mảng của bạn xuất phát. – dirkgently