배열에 section 11.14 of the C++-FAQ-lite을 적용하는 방법을 알고 싶습니다.오버로드 된 풀 연산자 delete를 선언하고 사용하는 방법은 무엇입니까?
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