порядок интерпретации описания
Правила работы с указателями и динамическим распределением памяти: · Инициализируйте указатели нулем, если они не используются немедленно. · Следите за тем, чтобы не применить оператор delete к указателю дважды. · Можно без опасений применять оператор delete к указателю, имеющему значение 0 или NULL. · Устанавливайте указатели в NULL или 0 после уничтожения объектов · Разыменовывайте указатель для получения объекта, на который он указывает.
Ссылки Ссылка (reference) - это специальный тип указателя, который позволяет работать с указателем как с обычным объектом. Ссылки, как и указатели, могут вызвать путаницу. Ссылка объявляется с помощью специального оператора ссылки. Для этого оператора используется тот же символ (&), что и для оператора взятия адреса (не беспокойтесь, компилятор знает, как их различить). Ссылка позволяет трактовать указатель как объект. Рассмотрим пример: MyStruct* pStruct = new MyStruct; MyStruct& ref = *pStruct; ref.X = 100; Обратите внимание, что со ссылкой используется оператор прямого доступа. Теперь можно избавиться от этих надоедливых операторов ->! Хотя вы не будете использовать ссылки в большом количестве, они могут оказаться очень удобны, когда в них возникнет необходимость. Между тем, рассмотренный фрагмент стоит немного сжать. В реальной программе я написал бы его следующим образом: MyStruct& ref = *new MyStruct; ref.X = 100; Это не очень наглядно, но работает точно так же, как и в первом примере. Подобные комбинированные операторы часто используются и позволяют избежать ненужной избыточности. Может показаться, что ссылки предпочтительнее указателей, но это не так. Из-за некоторых специфических свойств ссылки нельзя использовать во многих случаях. Например, ссылку нельзя сначала объявить, а затем присвоить ей значение. Инициализация должна быть выполнена одновременно с объявлением. Следующий фрагмент приведет к выдаче сообщения об ошибке: MyStruct* pStruct = new MyStruct; MyStruct& ref; ref = *pStruct; ref.X = 100; Ссылки нельзя установить в 0 или NULL, как указатели. Это означает, что вы должны следить за тем, чтобы не применить к ссылке оператор delete дважды. Ссылки и указатели часто выполняют одни и те же функции, но не обладают универсальностью. В одних ситуациях удобнее использовать ссылку, в других - указатель.
|