Учитывая все ответы, которые уже здесь, я думаю, что я сумасшедший, но мне это кажется правильным, поэтому я все равно публикую его. Когда я впервые увидел ваш пример кода, я подумал, что вы нарезаете экземпляры B
и C
, но потом я посмотрел немного ближе. Теперь я вполне уверен, что ваш пример не будет компилироваться вообще, но у меня нет компилятора в этом окне для тестирования.
A * array = new A[1000];
array[0] = new B();
array[1] = new C();
Для меня это выглядит так, будто первая строка выделяет массив 1000 A
. Последующие две строки воздействуют на первый и второй элементы этого массива соответственно, которые являются экземплярами A
, а не указателями на A
. Таким образом, вы не можете назначить указатель на A
этим элементам (а new B()
возвращает такой указатель). Типы не одинаковы, поэтому он должен завершиться с ошибкой во время компиляции (если A
не имеет оператора присваивания, который принимает A*
, и в этом случае он будет делать то, что вы ему сказали).
Итак, я совсем не в базе? Я с нетерпением жду, чтобы узнать, что я пропустил.