Я разобрался как заменить обычный operator delete
void operator delete(void *p, clock_t stop )
{
//....
::operator delete(p)
}
template <typename T>
void DbgDelete(T* p, clock_t stop)
{
p->~T();
operator delete(p, stop);
}
А как мне быть с operator delete[]?
void operator delete[](void *p, clock_t stop )
{
//....
::operator delete[](p)
}
template <typename T>
void DbgArrayDelete(T* p, clock_t stop)
{
// как вызвать деструкторы для элементов массива?
operator delete(p, stop);
}
С помощью отладчика и метода тыка сделал рабочий код:
void operator delete[](void *p,clock_t stop )
{
//...
::operator delete[](p);
}
template <typename T>
void DbgArrayDelete(T* p,clock_t stop)
{
size_t* rp=reinterpret_cast<size_t*>(p)-1;
const size_t count=*rp;
for(size_t i=0; i<count; i++)p[i].~T();
operator delete[](rp,stop);
}
Это нормально работает, но очень похоже на "хак"
Чего можете сказать по этому поводу?
Здравствуйте, BOPOH_N, Вы писали:
BOP>template <typename T>
BOP>void DbgArrayDelete(T* p,clock_t stop)
BOP>{
BOP> size_t* rp=reinterpret_cast<size_t*>(p)-1;
BOP> const size_t count=*rp;
BOP> for(size_t i=0; i<count; i++)p[i].~T();
BOP> operator delete[](rp,stop);
BOP>}
ИМХО такое решение не переносимо.