Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Отладочный delete принимающий размер класса


Автор: georain 14.1.2009, 22:01
Есть два типа перегруженных операторов delete:
Код

void operator delete(void * ptr);
void operator delete(void * ptr, size_t size);

второй принимает размер класса.

В оператор new можно добавлять параметры:
Код

void * operator new(size_t size, const char * str);


Код

new("Строка") SomeClass;

При выбросе исключения в конструкторе SomeClass вызывается delete соответствующий new
Код

void operator delete(void * ptr, const char * str);

Если такого оператора нет, то никакой оператор не будет вызван.

Задача 1:
Требуется иметь new с доп. параметрами и при этом delete принимающий размер

Задача 2:
Требуется иметь delete принимающий размер и доп. параметры
Код

delete ("Строка") ptr;


Все это должно работать при выбросе исключений.

Для чего это нужно: для создания отладочных new и delete, принимающих __FILE__, __LINE__.
Есть идея создать макрос NEW(SomeClass) и DELETE(ptr), (вставка FILE-LINE внутри) но это сами понимаете...
В крайнем случае макросы можно было бы иметь такие: NEW SomeClass и DELETE ptr, но как сделать такой NEW у меня идей нет.

Автор: ZeroPoint 21.1.2009, 13:55
Не точно то, о чем спрашивалось, но очень похоже:

http://www.realcoding.net/article/view/109

Автор: just_geek 22.1.2009, 08:03
Цитата

Задача 1:
Требуется иметь new с доп. параметрами и при этом delete принимающий размер

а зачем тебе делет принимающий размер? он будет не корректно размер вычислять (особенно это касается delete[] )


Цитата

Задача 2:
Требуется иметь delete принимающий размер и доп. параметры


нельзя... только когда исключение кидается.

Автор: georain 23.1.2009, 18:55
Цитата(just_geek @  22.1.2009,  08:03 Найти цитируемый пост)
а зачем тебе делет принимающий размер? он будет не корректно размер вычислять

delete принимающий размер корректно его вычисляет

Цитата(just_geek @  22.1.2009,  08:03 Найти цитируемый пост)
нельзя... только когда исключение кидается. 

хорошо, как его сделать чтобы только когда исключение кидается?

Автор: georain 23.1.2009, 19:34
Цитата(ZeroPoint @  21.1.2009,  13:55 Найти цитируемый пост)
Не точно то, о чем спрашивалось, но очень похоже:
http://www.realcoding.net/article/view/109 

Да, статья говорит о идее испозьзовнаия, но там ничего не сказано что будет с этим кодом в случае исключений.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)