boost.pool을 사용하고 싶습니다. 당신이 그것에 대해 모른다면 괜찮습니다. 기본적으로 malloc()과 free()의 두 가지 주요 함수가 있습니다.오버로드 된 삭제하기 전에 소멸자를 호출하지 못하게 할 수 있습니까?
사용자 정의 클래스 테스트를 위해 new 및 delete를 오버로드했습니다.
class test
{
public:
test()
{
cout << "ctor" << endl;
}
~test()
{
cout << "dtor" << endl;
}
void* operator new(size_t) throw()
{
cout << "custom operator new" << endl;
return _pool.malloc();
}
void operator delete(void* p)
{
cout << "custom operator delete" << endl;
_pool.free(p);
}
void show()
{
cout << _i << endl;
}
private:
int _i;
static boost::pool<> _pool;
};// class test
boost::pool<> test::_pool(sizeof(test));
나는 새로운 사용하여 테스트의 인스턴스를 생성
는 생성자가 호출되지 않았습니다하지만 난 그것을 삭제하면, 소멸자 라는이었다. 왜? 내가 그것을 피할 수 있을까요?
당신이 '시험'에 – MSalters
귀하의 소멸자 이름 '윤'의 발행 수의 절반을 변경 보인다 클래스 이름과 일치하지 않습니다. 실제 코드를 보여주십시오. – dave4420
윤이 테스트로 바뀌고 메인 테스트를 추가했을 때 * p = new test; p를 삭제하고, 출력은 "custom new/ctor/dtor/custom delete"입니다. 완전하고 컴파일 가능한 예가 필요합니다. – UncleBens