по логике и документации оператор new может вернуть NULL.
какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?
Думаю, что программно это никак нельзя сделать. NULL получим только в случае нехватки памяти при распределении ее в момент создания объекта.
Если нужно по каким-то причинам не использовать объект (например, переданы некорректные значения конструктору), то для этого придется создавать еще один public-метод (у меня IsInit()), который вызывается после успешного создания объекта. В итоге, если IsInit() возвращает false, то с таким объектом далее не работаем.
class A { public: A() { delete &this; } }; void OnStart() { A* a = new A; Print(EnumToString(CheckPointer(a))); }
по логике и документации оператор new может вернуть NULL.
какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?
new может быть и может вернуть, но конструктор не может.
Два варианта:
1. В конструктор передать переменную по ссылке, в ней возвращать результат. Если отрицательный, то delete.
2. Дополнительный метод для проверки результата. Вызывать его после создание объекта.
Для всех объектов, внутри которых вызывается new - я всегда использую отдельную функцию инициализации.
Сперва конструктор определяет внутренние переменные, в том числе указатели будущих создаваемых по new объектов - на NULL.
А потом, вызывается функция bool Init(), в которой вызываются операторы new, и проверяются возвращаемые указатели. Если они валидны - они записываются во внутренних переменных, и Init() возвращает true. Если же new возвратил невалидные указатели - то Init() также возвращает false, и работа завершается с предупреждениями об ошибке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
по логике и документации оператор new может вернуть NULL.
какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?