В первом примере -
int* Bar;
Указатели указывают на объект.Задача компилятора - назначить память (т. Е. 4 байта) для целочисленного указателя Bar
для хранения адреса целочисленной переменной.Однако, местоположение, на которое оно указывает, должно быть указано для разыменования.
Это больше похоже на то, что банк предоставляет вам счет.Наличие банковского счета не означает, что вы можете получать деньги из банкомата.На вашем счету должны быть деньги, чтобы можно было рисовать.Транзакция терпит неудачу, если у вас нет денег и в парадигме программирования поведение не определено.Итак, ваш первый пример поведения не определен.Если моя аналогия слишком неловкая, извините.
Во втором примере -
int* Bar = new int[1] ; // Here [1] is unnecessary as your Bar points to a single integer memory location.
Здесь Bar
- указатель, указывающий на местоположение действительного целого числа, полученного из бесплатного магазина,Таким образом, местоположение, на которое указывает Bar
, может иметь значения мусора.Итак, инициализируйте его, прежде чем разыменовывать.т. е.
*Bar = 10;
*Bar *= 10;
Во втором примере, поскольку вы управляете ресурсами, вы обязаны вернуть источники обратно в бесплатное хранилище.