Может ли перегруженный новый оператор получать аргументы для передачи конструктору объекта?
Я вижу много библиотек C++, занимающихся динамическим распределением памяти следующим образом:
Qimage* _image = new QImage(width, height, QImage::Format_RGB888);
if (!_image)
{
// Failed!
}
Мне интересно, что можно проверить, был ли объект успешно выделен или нет, с помощью простого кода, такого как if (!_image)
,
1) Интересно, это стандартная особенность стандарта?new
или если это возможно только при перегрузке operator new
с вашей собственной реализацией.
2) Как бы я пошел о реализации operator new
в этом случае, где он получает аргументы для конструктора объекта и возвращает NULL в случае, если ширина && height равна 0?
Я правильно понял?
1 ответ
То, что вы видите, неверно. new больше не возвращает ноль, но вместо этого выдает std::bad_alloc
Перегрузка нового есть пример. Вам не нужно иметь дело с аргументами конструктора
То, что вы пытаетесь сделать, сделано makefshared в C++11