История изменений
Исправление kiverattes, (текущая версия) :
У него нет выбора. Есть ветвь выполнения кода, в которой написано «вызвать деструктор XX». Эта ветвь выполняется, когда происходит исключение при конструировании очередного элемента массива (для удаления тех, которые к тому моменту успели сконструироваться). А раз такая ветвь есть, то компилятор генерирует её код. И тут он обнаруживает, что ветвь нарушает права доступа к деструктору XX::~XX() и поэтому ругается на оператор new[], являющийся родителем для всех этих ветвей.
Исправление kiverattes, :
У него нет выбора. Есть ветвь выполнения кода, в которой написано «вызвать деструктор XX». Эта ветвь выполняется, когда происходит исключение при конструировании очередного элемента массива (для удаления тех, которые к тому моменту успели сконструироваться). А раз такая ветвь есть, то компилятор генерирует её код. И тут он обнаруживает, что ветвь нарушает права доступа к деструктору XX::~XX() и поэтому ругается на new[], спровоцировавший генерацию этой ветви в том числе среди прочих.
Исходная версия kiverattes, :
У него нет выбора. Есть ветвь выполнения кода, в которой написано «вызвать деструктор XX». Эта ветвь выполняется, когда происходит исключение при конструировании очередного элемента массива для удаления тех, которые к тому моменту успели сконструироваться. А раз есть такая ветвь, то компилятор её кладёт в генерируемый код. И тут он понимает, что вызвать деструктор он не может и ветвь противоречит стандарту C++ и ругается на new[], спровоцировавший генерацию этой ветви в том числе среди прочих.