Классы C ++ - вопрос по указателям - PullRequest
1 голос
/ 16 ноября 2009

У меня была викторина в школе, и был один вопрос, который я не был уверен, правильно ли я ответил. Я не смог найти ответ в книге, поэтому я просто хотел спросить вас.

Point* array[10];

Сколько экземпляров класса Point создается при вызове вышеуказанного кода?

Я ответил «нет», потому что он создает пространство только для 10 экземпляров, но не создает ни одного. Тогда мой друг сказал, что это был всего лишь один, потому что когда компилятор видит Point *, он просто создает один экземпляр в качестве базы.

Ответы [ 4 ]

14 голосов
/ 16 ноября 2009

Не создает Point с.

Создает массив из десяти указателей, которые могут указывать на Point объекты (он не создает места для десяти экземпляров ). Однако указатели в массиве неинициализированы, и Point объекты фактически не создаются.

4 голосов
/ 16 ноября 2009

Вы почти правы.

Код не создает экземпляров Point. Тем не менее, он создает 10 экземпляров Point *. не создает пробел для Point экземпляров; это делается с помощью вызова new, например.

2 голосов
/ 16 ноября 2009

Point* array[10] создает массив с десятью слотами для указателей с номером 0,9.

Вы оба не правы - в C ++ с таким утверждением не происходит инициализация, если только

  1. вы используете специальный распределитель памяти, который обнуляет память, такой как SmartHeap (или C ++ / CLI) или
  2. если массив находится за пределами функции (например, только в файле .cpp как глобальный), и в этом случае все указатели обнуляются.

Абсолютно никакие экземпляры не создаются.

С уважением не соглашаясь с точкой Стрейджера, не существует такой вещи, как экземпляр Точки *, и было бы опасно думать о существовании такой вещи. Существует только место для указателя и проверки во время компиляции, чтобы гарантировать, что в этот указатель можно назначить только указатель этого типа или указатель на подкласс.

1 голос
/ 16 ноября 2009

в C ++ не происходит инициализация с таким утверждением

Объекты Point* в array инициализируются нулями, если array глобальный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...