Определяю свои глобальные операторы:
void * __cdecl operator new(size_t size, int type, const char * file, int line, clock_t start)
{
return ::operator new( size+sizeof(start), type, file, line));
}
void __cdecl operator delete(void * p, int type,const char * file,int line,clock_t stop )
{
::operator delete(p, type, file, line);
}
main()
{
Class *A = new (_NORMAL_BLOCK, __FILE__, __LINE__, clock());
// все нормально объект память выделяется конструктор выполняется
// а тут проблема, если так
delete(A); // не вызывается мой оператор delete
// если так
operator delete(A, _NORMAL_BLOCK, __FILE__, __LINE__, clock());
//то не вызывается деструктор
}
Как правильно вызвать мой оператор delete?
Правилен последний вариант, только перед этим надо уничтожить объект:
A->~Class();
BOP> operator delete(A, _NORMAL_BLOCK, __FILE__, __LINE__, clock());
При использовании placement allocation/deallocation functions приходится вызывать деструкторы вручную.
Твой хитрый оператор delete будет вызван (неявно) только в случае возникновения исключения в конструкторе объекта, а сам ты, действительно, вынужден писать operator delete(expr-list).
Здравствуйте, a-lex, Вы писали:
AL>Правилен последний вариант, только перед этим надо уничтожить объект:
AL>AL> A->~Class();
BOP>> operator delete(A, _NORMAL_BLOCK, __FILE__, __LINE__, clock());
AL>При использовании placement allocation/deallocation functions приходится вызывать деструкторы вручную.
Обидно, досадно — ну ладно...