Скачать MetaTrader 5

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

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

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

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

Ihor Herasko
9690
Ihor Herasko  
Maxim Kuznetsov:

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

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

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

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

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

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

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

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

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

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

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

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

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

George Merts
3827
George Merts  

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

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

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

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