Переопределенный delete[]
От: BOPOH_N Россия  
Дата: 10.02.04 17:30
Оценка:
Я разобрался как заменить обычный 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);
}

В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Переопределенный delete[]
От: BOPOH_N Россия  
Дата: 10.02.04 20:04
Оценка:
С помощью отладчика и метода тыка сделал рабочий код:
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);
}

Это нормально работает, но очень похоже на "хак"
Чего можете сказать по этому поводу?
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Переопределенный delete[]
От: ArtDenis Россия  
Дата: 11.02.04 04:42
Оценка:
Здравствуйте, BOPOH_N, Вы писали:


BN> http://www.rsdn.ru/Forum/Message.aspx?mid=509376&amp;only=1
Автор: ArtDenis
Дата: 16.01.04
Posted via RSDN NNTP Server 1.8 beta
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Переопределенный delete[]
От: nickt0 Россия  
Дата: 11.02.04 09:28
Оценка:
Здравствуйте, 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>}


ИМХО такое решение не переносимо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.