С++ для начинающих Part 0002

Page 1

С++ для начинающих Шаблон класса auto_ptr обеспечивает значительные удобства и безопасность использования динамически выделяемой памяти. Однако все равно надо не терять бдительности, чтобы не навлечь на себя неприятности: •

нельзя инициализировать объект auto_ptr указателем, полученным не с помощью оператора new, или присвоить ему такое значение. В противном случае после применения к этому объекту оператора delete поведение программы непредсказуемо;

два объекта auto_ptr не должны получать во владение один и тот же объект. Очевидный способ допустить такую ошибку – присвоить одно значение двум

auto_ptr< string > pstr_auto( new string( "Brontosaurus" ) ); // ошибка: теперь оба указывают на один объект // и оба являются его владельцами

объектам. Менее очевидный – с помощью операции get(). Вот пример: auto_ptr< string > pstr_auto2( pstr_auto.get() );

Операция release() гарантирует, что несколько указателей не являются владельцами одного и того же объекта. release() не только возвращает адрес объекта, на который ссылается auto_ptr, но и передает владение им.

// правильно: оба указывают на один объект, // но pstr_auto больше не является его владельцем auto_ptr< string >

Предыдущий фрагмент кода нужно переписать так: pstr_auto2( pstr_auto.release() );

8.4.3. Динамическое создание и уничтожение массивов Оператор new может выделить из хипа память для размещения массива. В этом случае после спецификатора типа в квадратных скобках указывается размер массива. Он может быть задан сколь угодно сложным выражением. new возвращает указатель на первый

// создание единственного объекта типа int // с начальным значением 1024 int *pi = new int( 1024 ); // создание массива из 1024 элементов // элементы не инициализируются int *pia = new int[ 1024 ]; // создание двумерного массива из 4x1024 элементов

элемент массива. Например: int (*pia2)[ 1024 ] = new int[ 4 ][ 1024 ];

pi содержит адрес единственного элемента типа int, инициализированного значением 1024; pia – адрес первого элемента массива из 1024 элементов; pia2 – адрес начала

402


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.