![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Удалено модератором
-------------------- Волны гасят ветер... |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Модератор: Пожалуйста, давайте обсуждать ООП в обоих смыслах во флейме, а целесообразность програмных технологий, если уж тах хочется, то отдельным топиком.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
С интересом бы прочитал этот коментарий! То, что взгляды не совпадают, явление нормальное, да и шутить тоже не грех, причем, на любую тему!
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Все замолчали на эту тему, а, по-моему, она не закрыта! Добавлю еще ряд подвопросов.
class PState{} PState * ps[1200]; // статически выделенная память for(i = 0; i <1200;i++)ps[i] = new PState (); /*заполняем предыдущий статический массив динамически*/ /* какой-то дурацкий код... */ delete [ ] ps; /* похоже, что этот оператор освободит КАЖДЫЙ динамически выделенный элемент массива*/ // Теперь то же, но по-другому PState **pps = new PState *[1200]; /*кстати, не понятно почему PState *pps[ ] = new PState *[1200]; выдает ошибку - это же одно и то же!!!*/ for(i = 0; i <1200;i++)pрs[i] = new PState (); /*заполняем динамический массив динамически*/ /* еще какой-то дурацкий код... */ delete [ ] pps; /*А что удаляет этот оператор? Массив указателей или и все что внутри тоже? А может правильно делать так: for(i = 0; i <1200;i++)delete pрs[i]; delete [ ] pps: */ Господа, пожалуйста, делитесь ОПЫТОМ и КОДОМ, а не соображениями. Спасибо. --------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Чем же это она не закрыта? На все предыдущие вопросы ответы были данны. -------------------- Волны гасят ветер... |
|||
|
||||
| Fantasist |
|
||||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
НЕЛЬЗЯ так делать! Я уже об этом говорил. delete[] применим ТОЛЬКО к указателям, для которых память была выделенна с помощью new[] . То, что на вашем компиляторе это может быть работает не означает, что так можно. Если в цикле выделяете, то и в цикле и освобождайте. То есть либо так:
либо так:
Ничего это не одно и то же, если вы пишите на С++. На мой взгляд, это извращение высшего порядка - в С++ классы есть. А тип PState *[] это не то же самое, что PState **, а то, что они оба реализуются как указатель на указатель, не делают их одним и тем же типом. Это в Java вы можете писать: Сpd pd[]; pd=new Cpd[10]; В С++ это не так.
Да. delete[] удаляет массив из нескольких элементов и для каждого из них вызывается деструктор, если тип нетривиальный. В данном случае - это массив указателей - тип тривиальный. Строчкой delete [ ] pps; массив указателей будет удален. Объекты, на которые эти указатели указывали никто удалять за вас не будет. -------------------- Волны гасят ветер... |
||||||||||
|
|||||||||||
| Guest |
|
||||||||||
|
Unregistered |
Уважаемый, Fantasist
С этого все начиналось... PayState *ptr; // класс поинтер вестимо PayState *pPayState[1200]; for (i = 0; pPayState[i] != NULL; i++ )delete pPayState[i]; // я думал, что тут я освобождаю всю занятую память i = 0; do { ptr = new PayState ( bc, ic ); // конструктор - аллокирует новую запись if ( ptr != NULL ){ // успешно // какой-то дурацкий код... pPayState[i++] = ptr; //Поместить в массив для дальнейших нужд } else { ShowMessage ("Not enough memory, Sorry"); exit ( EXIT_FAILURE ); } } while ( ); // больше записей нет! Я начал эту тему потому что НЕ работало. Скопированное из хэлпа delete[ ] pPayState; прекрасно освобождало память. Это и послужило отправной точкой дискуссии. Ответа на почему не работало не нашлось, хотя гипотезы и предположения были. Обратите внимание, в НЕработающем коде я делал именно так, как вы настаиваете и я изначально делал.
Согласен, что некрасиво, но почему то что красиво не согласно со мной?
Мы о Джаве не говорим. А вот void main(int argc, char *argv[ ]){...} void main(int argc, char **argv ){...} Это что не C++? Или что-то из этого не? Или это не одно и тоже? Не буду утверждать безаппеляционно, как некоторые, но замечу, что по определению [ ](массив) это *(указатель), и если есть
И причем тут классы? В С++ много чего есть! И при чем тут извращения? Где сказано, что в ++ указатель на массив какого-либо типа и указатель на указатель того же типа, не одно и тоже? Единственный довод в Вашу пользу, что компилятор выдает ошибку, но это не самый сильный довод.
Похоже, что и это не так. Посмотрите опять на самое начало. И давайте аргументировать, а не бросаться формулами. С уважением, BRB |
||||||||||
|
|||||||||||
| Fantasist |
|
||||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Слушайте, а чем вы компилируете? ? ? Вот код:
Компилируем VS60. На последнюю строчку получаем:
При исполнении все грохается на последней строчке, как и следовало ожидать. И это законно - освобождение стековой переменной.
Ну сколько можно! Это не не красиво, это НЕ ПРАВИЛЬНО по СТАНДАРТУ!
Никогда такого опеределения не было. Поймите, С++ - это не С. Это разные языки, хоть и похожи. В С++ вы неможете написать: char p[]=new char[100]; Не можете, и все. Это СТАНДАРТ языка. ТО ЧТО МАССИВ(в реализации) ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ НЕ МЕНЯЕТ ПОЛОЖЕНИЯ. Удалено модератором -------------------- Волны гасят ветер... |
||||||||||
|
|||||||||||
| brb |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Fantasist
Билдером. Был первый, сейчас обзавелся 6-м
Может VC6?
C++ это надмножество С. Не верите? Спросите у Страуструпа(фамилию, наверняка, переврал, но все равно узнаваемо), он ++ сочинил!
Во-первых, частица НЕ с глаголами пишется раздельно, по крайней мере, на русском языке! А, во-вторых, хотел бы узнать не то, что это ошибка /* Cannot convert 'char *' to 'char[]'*/, а почему это так!
Массив указателей был объявлен СТАТИЧЕСКИ! Может это причина? Почему же, все-таки первый вариант(внутри цикла до NULL) не работал? И мы именно с Вами это уже обсуждали!
Последнее замечание оставленно Вами без ответа. Тем не менее, от добра добра не ищут, и я оставил все как есть, потому что нет проблем! Удалено модератором --------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
||||||||||||
|
|||||||||||||
| Unregistered |
|
|||
|
Unregistered |
Удалено модератором
|
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Удалено модератором
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Удалено модератором
Вот %^&$!! ДА ПОТОМУ ЧТО ЭТО РАЗНЫЕ ТИПЫ ОПРЕДЕЛЕННЫ СТАНТДАРТОМ ЯЗЫКА Mассив - это статический (причем с фиксированным размером!) кусок памяти и все тут. Исключения составляют формальные аргументы функций. Удалено модератором -------------------- Волны гасят ветер... |
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Удалено модератором
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Модератор: ещё не забыли о чём спрашивалось в теме? Напоминаю -
2 brb: если на вопрос отвечено, то я тему закрываю, если нет, то спрашивайте по существу чтО именно не понятно. 2 Fantasist: Давайте без перехода на личности -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Удалено модератором
-------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |