C ++ / Windows: замена глобальных новых произведений новым [] не - PullRequest
2 голосов
/ 14 декабря 2011

Я только начал играть с переопределением глобального new / delete (исключительно для образовательных целей), и у меня возникла проблема.

Я использую довольно зрелый проект для тестирования с несколькими k loc. Первым делом я переопределил new и new[], чтобы просто использовать malloc и увеличить статический счетчик. new, кажется, работает нормально, но я заметил, что мой new вызывается из-за версии new[] из newaop.cpp, которая выглядит так:

void *__CRTDECL operator new[](size_t count) _THROW1(std::bad_alloc)
{   // try to allocate count bytes for an array
    return (operator new(count));
}

Моя версия

void* operator new[](size_t count)
{
    // malloc and whatnot
}

new[] вызывается некоторыми функциями stl. Мои версии находятся в файле .h / .cpp, который является первым включением во все остальные файлы проекта.

У меня не было много времени, чтобы попытаться выяснить, почему сегодня утром, но я был бы рад, если бы кто-то мог объяснить, почему моя версия не называется.

Редактировать: сборка отладка / x86, я не помню контейнер stl (не дома), но, вероятно, map.

1 Ответ

0 голосов
/ 07 февраля 2012

Просто сделайте что-то вроде: char* p = new char[100]; delete[] p; и установите точку останова и посмотрите, что произойдет.

...