정상적인 상황에서 메모리 할당 해제를 처리하는 방법을 알고 있습니다. 내 경우는 조금 다르다.연산자 삭제 - 구현하는 방법?
나는 내 자신의 메모리 풀을 구현하고있다. 나는 클래스의 클라이언트가 할당 및 할당 해제의 일반적인 방법에 가깝게되기를 원할 것이다.
inline void* operator new(size_t dead_param, CPool& objPool)
{
return objPool.Allocate();
}
내 클래스의 사용자가 단순히
Base baseObj = new (poolObj)Base2();
를 호출 할 수 있도록 내가이 글로벌 기능이
지금은 소멸자를 호출하는 방법을 몰라? 나는 글로벌 운영자가inline void operator delete(void* ptr, CPool& objPool)
{
objPool.DeAllocate(ptr);
}
가이드하시기 바랍니다 삭제해야하지만 내가 클라이언트 코드에서 호출이 기능을 얻을 수있는 방법 나는 .. 아무 생각
이 없습니다 clearl? 사용자 측에서 최소한의 구문 변경. 또한 내 코드 사용자가 operator new
및 operator delete
을 구현하고 거기에서 Allocate
및 DeAllocate
을 호출하는 것을 원하지 않습니다.
왜 사람들은'자료 * baseObj = poolObj.Allocate()를 호출 단지가, 클라이언트에 대한' – Barry
구문 조금 못 생겼어. 'Base * baseObj = (Base *) poolObj.Allocate()'. Yuck .. 타입 캐스팅 ... 최종 리조트로 유지 했음에도 불구하고 ..이 함수를 호출 할 수 없기 때문에 저는 지금 큐러입니다. – Adorn
생성자가 종료 될 때만 배치 내부에서 새로운 배치가 삭제됩니다 예외. 다른 모든 경우에는 "정상적인"연산자 delete (void *)가 호출됩니다. 추가 입력없이 할당 된 메모리 블록에 충분한 정보를 저장하여 나중에 할당을 취소 할 수 있습니다. 종종 할당자는 반환하는 포인터의 음수 오프셋에 추가 정보를 씁니다. –