Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
andrew_s Гость
|
Добавлено: Вт Сен 10 2002 16:10 Заголовок сообщения: Сорри за пред. сообщение. Тема: Помогите разобраться с new/delete |
|
|
Хочу заменить дефолтные функции new/delete на свои. Надо чтобы при вызове своих функций передавались имя файла и номер строки.
В упор не могу понять по какой логике работает следующая конструкция: a = new(__FILE__,__LINE__) char[100] -> вызывает: void*operator new(size_t size,const char* file,unsigned line) { ... } Если кто мне объяснит что это за синтаксис такой - спасибо ему БОЛЬШОЕ, но это не главное, т.к. проделать подобную фишку с delete не получается.
Вызов: delete(__FILE__,__LINE__,ptr) проходит нормально без возражений, но оператор первые 2 аргумента _просто_не_получает_!!! (ни в каком виде). Компилятор их даже в стек не пихает. И естественно не позволяет определить OPERATOR DELETE c аргументами отличными от (VOID*), хотя против доп. аргументов для NEW он ничего не имеет...
Как это можно обойти (и можно-ли вообще)? |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Чт Сен 12 2002 20:33 Заголовок сообщения: Re: Помогите разобраться с new/delete |
|
|
В стандарте C++ функция-оператор new имеет либо 1 аргумент -- тип объекта (на самом деле размер этого типа), -- либо 2 -- тип и количество объектов. В твоем случае она переопределена. Поищи среди заголовочных файлов файл, где она переопределяется и посмотри на нее. Аналогично с функцией-оператором delete. Вероятней всего обнаружишь, что на самом деле они обе вызываются как стандартные операторы, а их дополнительные параметры сообщаются исключительно компилятору в целях отладки, а во время исполнения дополнительные параметры не участвуют. Поэтому ты их не видишь в стеке. |
|
Вернуться к началу |
|
|
|