    Использование динамических строк

    Вы можете использовать new для выделения динамической символьной строки
практически любого размера. Листинг 12.11 демонстрирует, как это делается.

    Листинг 12.11. NEWSTR.CPP (объявление строк с помощью new)

    1:	#include <iostream.h>
    2:
    3:	#define SIZE 80
    4:
    5:	main()
    6:	{
    7:
     8.	  char *sp
    . 9:	  sp = new char[SIZE];
    10;	  cout «	"String?";
    11:	  cin.getlinefsp, SIZE);
    12:	  cout « "You entered:" « sp « '\n';
    13:	  delete[]	sp;
    14:	  return 0
    15:	}

    Строка 9 выделяет символьный массив размером SIZE в байтах и присваивает
адрес первого байта этого массива sp. Строки 10-12 демонстрируют использование
динамических строк, запрашивая и выводя строку текста.
    Строка 13 удаляет динамический символьный массив. Borland C++ разрешает
написать этот оператор без скобок следующим образом:

    delete sp; // ???, но безопасно в Borland C++

    Следуя более строгому протоколу C++, необходимо использовать пустые скобки
в выражении delete[], указывающие компилятору, что удаляется массив, а не
простая переменная. (В Borland C++ скобки необходимы только в том случае, если
удаляется массив классовых объектов, но об этом позже.)
    В ранних версиях C++ при удалении массива нужно было указывать количество
элементов. В C++ версии 2.0, например, строка 15 имела бы вид delete(SIZE]
sp;. Borland C++ игнорирует SIZE в таком случае и выдает предупреждение о
попытке использовать устаревшую форму delete.

    Использование динамических массивов

    Конечно, строки — это те же символьные массивы, и тот факт, что new и
delete также могут использоваться для создания и освобождения динамических
массивов любого типа, не будет для вас сюрпризом. Листинг 12.12 демонстрирует это.

    Листинг 12.12. NEWARRAY.CPP (объявление массивов с помощью new)

     1:     #include <iostream.h>
     2:
     3:     #define COUNT 100 // Количество целых значений
     4:
     5:     main()
     6:     {
     7:     int *array; // Массив целых значений
     8:     int i; // Индекс массива
     9:
    10:     array = new int[COUNT];
    11:
    12:     // Заполнение массива
    13:     for (i = 0;  i < COUNT;  i++)
    14:     array[i] = i;
    15:
    16:     // Вывод содержимого массива
    17:     for (i = 0;  i < COUNT;  i-н-) {
    18:       cout.width(e);
    19:       cout « arrayfi];
    20:     }
    21:     delete[] array;
    22:     return 0;
    23:     }

    В этом примере в строке 7 объявляется указатель на массив целых значений.
В строке 10 используется new для выделения места для 100 целых значений. Затем
массив заполняется значениями от 0 до 99 и выводится в


    Глава 12. Введение в C++     293 
