Код: Выделить всё
void * operator new (size_t s, PersistentMemory * m) throw() {
return m->allocatePersistentMemory(s);
}
Однако на основе 3.7.3.1 параграфа 3 стандарта C++ 2003:
Функция распределения, которая не удалось выделить хранилище, можно вызвать
установленный в данный момент new_handler (18.4.2.2), если таковой имеется. [Примечание:
обеспечиваемая программой функция выделения может получить адрес
установленного в данный момент new_handler с помощью функции set_new_handler
(18.4.2.3). ] Если функция выделения, объявленная с пустой
спецификацией исключения (15.4), throw(), не может выделить память, она
вернет нулевой указатель. Любая другая функция распределения, которая не может
выделить память, должна указывать на ошибку только путем выдачи
исключения класса std::bad_alloc (18.4.2.1) или класса, производного от
std::bad_alloc.
Я понимаю, что если m->allocatePersistentMemory(s) возвращает значение null, оно должно в результате весь оператор new() throw() вернет значение null без вызова конструктора. Я пропустил какое-то другое условие, которое переопределяет это?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/115 ... en-allocat
Мобильная версия