그래서 풀링해야하는 클래스에 최소한의 수정 만하면 C++ 개체를 쉽게 메모리 풀로 사용할 수 있습니다.서브 클래 싱하여 C++ 메모리 풀링
메모리 풀 자체는 어디서든 찾을 수있는 표준 다양한이지만, 나는이 수업을했습니다 :
Poolable::Poolable(MemPool& lepool){
mempool = &lepool;
}
Poolable::~Poolable(){
mempool->returnMemory((char*)this);
}
void * Poolable::operator new(size_t size, MemPool& lepool){
if(!lepool.initialised())
lepool.initializeBasedOnSize(size);
return lepool.getMemory(size);
}
void Poolable::operator delete(void * p){
// do absolutely NOTHING
}
사용 :
class SomeSubclass : public Poolable { /* boring details here */ };
MemPool thepool(1000);
SomeSubclass * woot = new(thepool) SomeSubclass(thepool);
내가 returnMemory의 통화를 보류하고 싶어 (이 기본적으로 delete 연산자에서 풀의 일부를 해제하지만 void * 인자에서 실제 풀 주소를 가져 오는 방법을 알지 못합니다.
대신 소멸자에 넣어서 해결했습니다. 나는 생성자가 클래스가 풀을 사용하여 할당되었다는 것을 명령하고, 이는 파기가 항상 할당 해제를 의미 함을 의미합니다.
첫 번째로 유용한 해결책이며 사용하는 것이 매우 편리합니다. 그러나, 그 일을 아마도 나쁜 스타일이며, 문제에 대한 더 나은 해결책이 있다면 나는 궁금해.
아무도 알고 있나요?
현대 C++ 디자인 읽기 : http://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315 –