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



         

Инициализация массива, распределенного из хипа * - часть 3


{

   for ( int ix = 0; ix < elems; ++ix )

       ps[ix].Account::~Account();

   delete [] reinterpret_cast<char*>(ps);

}

Если в функции инициализации мы пользовались арифметическими операциями над указателями для доступа к элементам:

new( p+offset*ix ) Account;

то здесь мы обращаемся к ним, задавая индекс в массиве ps:

ps[ix].Account::~Account();

Хотя и ps, и p адресуют одну и ту же область памяти, ps объявлен как указатель на объект класса Account, а p – как указатель на char. Индексирование p дало бы ix-й байт, а не ix-й объект класса Account. Поскольку с p ассоциирован не тот тип, что нужно, арифметические операции над указателями приходится программировать самостоятельно.

Мы объявляем обе функции статическими членами класса:

typedef pair<char*, double> value_pair;

class Account {

public:

     // ...

           static Account* init_heap_array(

                  vector<value_pair> &init_values,

                  vector<value_pair>::size_type elem_count = 0 );

           static void dealloc_heap_array( Account*, size_t );

     // ...

};




Содержание  Назад  Вперед