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

 
Maxim Kuznetsov:

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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