Скачать MetaTrader 5

как сделать чтобы new вернул NULL ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Добавили поддержку испанского языка. Заходи и изучай!
Maxim Kuznetsov
9830
Maxim Kuznetsov 2016.10.11 12:58 

по логике и документации оператор new может вернуть NULL.

какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?

Ihor Herasko
9073
Ihor Herasko 2016.10.11 13:49  
Maxim Kuznetsov:

по логике и документации оператор new может вернуть NULL.

какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?

Думаю, что программно это никак нельзя сделать. NULL получим только в случае нехватки памяти при распределении ее в момент создания объекта.

Если нужно по каким-то причинам не использовать объект (например, переданы некорректные значения конструктору), то для этого придется создавать еще один public-метод (у меня IsInit()), который вызывается после успешного создания объекта. В итоге, если IsInit() возвращает false, то с таким объектом далее не работаем.

fxsaber
4553
fxsaber 2016.10.11 14:11  
Не совсем то, конечно
class A
{
public:  
  A()
  {
    delete &this;
  }
};

void OnStart()
{
 A* a = new A;
   
 Print(EnumToString(CheckPointer(a)));
}
Alexey Volchanskiy
16683
Alexey Volchanskiy 2016.10.23 18:53  
Maxim Kuznetsov:

по логике и документации оператор new может вернуть NULL.

какие действия в конструкторе объекта надо предпринять чтобы получился NULL ?

Смысл ясен, но я бы использовал фабрику классов.
Dmitry Fedoseev
42924
Dmitry Fedoseev 2016.10.23 19:08  

new может быть и может вернуть, но конструктор не может.

Два варианта:

1. В конструктор передать переменную по ссылке, в ней возвращать результат. Если отрицательный, то delete. 

2. Дополнительный метод для проверки результата. Вызывать его после создание объекта

George Merts
3612
George Merts 2016.10.23 19:52  

Для всех объектов, внутри которых вызывается new - я всегда использую отдельную функцию инициализации.

Сперва конструктор определяет внутренние переменные, в том числе указатели будущих создаваемых по new объектов - на NULL.

А потом, вызывается функция bool Init(), в которой вызываются операторы new, и проверяются возвращаемые указатели. Если они валидны - они записываются во внутренних переменных, и Init() возвращает true. Если же new возвратил невалидные указатели - то Init() также возвращает false, и работа завершается с предупреждениями об ошибке.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий