На основе спецификации C++ это будет всегда бросать станд.:: bad_alloc, когда Вы используете просто новый без параметрических усилителей, но конечно могут быть некоторые не совместимые компиляторы.
я не кодировал бы, чтобы быть совместимым с не C++ совместимые компиляторы все же. Причем VC6 является одним из них в этом отношении.
Это - хорошая практика, хотя всегда устанавливать Ваш указатель в NULL после удаления их. Так из-за этого проверка ПУСТОЙ УКАЗАТЕЛЬ все еще необходима.
Однако вот пара опций к чистке Вашего кода:
Опция 1: Установка Вашего собственного нового обработчика
А безопасный способ очистить Ваш код должна была бы звонить: set_new_handler сначала.
Затем Вы могли проверить на ПУСТОЙ УКАЗАТЕЛЬ в своем обработчике и бросить станд.:: bad_alloc там, если ПУСТОЙ УКАЗАТЕЛЬ возвращается.
, Если Вам нравятся исключения лучше, затем это - Ваш лучший выбор. Если Вам нравится возвращать ПУСТОЙ УКАЗАТЕЛЬ лучше затем, можно также сделать это путем выполнения выгоды в новом обработчике.
Опция 2: Используя перегруженный, новый
, заголовочный файл стандарта C++ определяет структуру nothrow, который пуст. Можно использовать объект этой структуры, внутри новой для получения ее перегруженной версии, которая всегда возвращает ПУСТОЙ УКАЗАТЕЛЬ.
void* operator new (size_t size, const std::nothrow_t &);
void* operator new[] (void *v, const std::nothrow_t &nt);
Так в Вашем коде:
char *p = new(std::nothrow) char[1024];
у вас нет нескольких версий ludocore.dll в вашей системе, не так ли? Ошибки точек входа в процедуру обычно означают: вы скомпилировали свой проект с ludocore.lib версии x, и при запуске программы используется ludocore.dll версии y, а версия y не определяет LudoMemory :: Destroy ().
Ответ Джейкоба о нескольких версиях DLL кажется вероятным.
Кроме того, в некоторых системах сборки вы должны явно указать, какие функции будут экспортированы в DLL.
Изучите среду сборки и посмотрите, нужно ли предоставить список методов для экспорта в качестве точки входа.