|
Программирование >> Программирование на языке c++
delete c; delete [] f; эта форма используется для массивов Как и выще, префикс :: гарантирует использование глобальной версии оператора delete. Когда удаляется объект нового типа, заданного пользователем, то вызывается деструктор соответствующего класса. По аналогии с оператором new оператор delete вызывает функцию operator delete() (см. гл. 5). В заключение рассмотрим два примера, демонстрирующие использование операторов new и delete. #include <iostream.h> int fO(void) { return 5; } простейшая функция fO int f1(void) { return 10; } простейшая функция f1 int f2(void) { return 15; } простейшая функция f2 void main(void) { long* I; I = new long (123456L); cout *l endl; результат: 123456 delete I; удаление объекта *l class my class { new (float(*[7])()); Оператор delete также имеет один операнд (это унарный оператор). И его тоже можно записать в двух формах: <::> delete cast expression обычная форма <::> delete[] cast expression форма для массивов Результат выполнения оператора имеет тип void. Единственный операнд этого оператора (cast expression) должен быть указателем, возвращенным предшествующим оператором new. Если приложить оператор delete к указателю, полученному не от оператора new, то результат будет непредсказуемым и в больщинстве случаев ошибочным. Рассмотрим примеры: char* с = new char;, float* f = new float[150]; Точки входа, с которых начинается выполнение функ1щи Память, выделенная new ncw(inl(f3])()) new возвращает это значение, которое записывается в f int ССОХ) Рис. 2.2. Выделение памяти для массива f указателей на функции и использование этого массива. Здесь f- указатель на массив, но по правилам языков C/C++ его можно использовать и как имя массива char* р; public: my cla88(char* Р) : р(Р) {} это конструктор char* dl8play(void) { return р; } } *Р ~ W my class( University of Aveiro ); nepe- лпчп в конструктор строки University of Avoiro cout p c->di.splay() << endl; результат: University of Aveiro delete p c; удаление объекта *p c int (*(*f)){) = new (int (*[3])()); f ниже будет использоваться как массив из трех указателей на функции (см. рис. 2.2) f[0] = fO; f[1] = f1; f[2] = f2; for(int i=0;i<3;i++) cout f[i]() \t; результат: 5 10 15 delete [] f; Пример, приведенный ниже, показывает, как можно выделить память для двухмерного массива, который в языках C/C++ представляется в виде массива одномерных массивов (рис. 2.3). Ниже array - это имя массива одномерных массивов, т. е. имя массива указателей на одномерные массивы. #include <iostream.h> void main(void) { int **array; array - указатель на указатель array = new int*[3]; array - указатель на массив for(int i=0;i<3;i+-b) указателей на одномерные массивы array[i] = new int[4]; каждый i-й элемент массива указывает на одномерный имена одномерных массивов I имя двухмерного массива array
В языках С/С+-+- двухмерный массив представляется как указатель на массив указателен массив указателей на одномерные одномерный массив массивы ;- I одномерных массивов [ Рис. 2.3. Структура двухмерного массива в языках C/C++
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |