![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Ну учился как все, если есть new значит и делит..
Но часто встречал такой вариант
ну и.. что скажете...? Память не выделяли,а указатель удаляем. вообще, правильно , вернее нужно ли так? Пардон, что на МФС, но надеюсь всем понятно.. Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:03 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
-------------------- |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Domestic Cat
Привет старина, вот уж кого не ожидал увидеть.. Недаром я подозревал Так сылочка у меня молчит... И чем лучше не пользоваться..? Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:10 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Там про GetDlgItem
-------------------- |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
А все , работает.
Но я не за GetDlgItem()
Можно и так , суть не в этом... Почему иногда удаляют( иногда я вижу) указатели на которые не выделялась память..? Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:15 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Погоди, но ведь метод OpenURL возвращает указатель, а указатель может быть только на область памяти. Следовательно, память все-таки была выделена.
-------------------- |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Domestic Cat
Ладно, Ну а другие методы..
тут надо удалять? -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Удалять нужно только то, что создано через new, то есть на хипе. А в твоем примере переменная существует на стеке, потому память будет освобождена автоматически по завершению метода.
-------------------- |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Domestic Cat
Правильно, но тогда... Указатель же можно вернуть таким же образом?
Просто вопрос в другом, я то же всегда( как выше описано) удалял при явном выделении памяти.. Но в книгах иногда видел и удаление и неудаление без явного выделения памяти.. Мне -то что делать? Как жить? -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Насколько я помню, ничего хорошего при этом не выйдет
Так, чтобы не было мучительно больно за бесцельно прожитую жизнь (с) -------------------- |
||||
|
|||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Domestic Cat
Не я серьезно, про утечку памяти, ну не должно ж быть? Откуда я знаю, что там Мелкие внутри своих функций делают.. Просто говорю, что видел один код, в разным вариантом, кто удаляет, кто нет.... -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Удаляй, хуже не будет...
-------------------- |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Domestic Cat
А иногда и в дебаг вылетаю.... Не могу понять когда да ,и когда нет. Если это нужно делать, то буду(хотя мароки будет.........) у нас же все через указатели.. Добавлено @ 22:53 Классический код С++ я учил давно, но не помню про delete без выделения памяти.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
Все что говорим мсдн:
Если тебе возвращают указатель, значит память была выделена на хипе по-любому, значит нужно удалять. -------------------- |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 1 Всего: 92 |
Может быть и не выделена, может использовались скажем параметры, преданные функции. А так надо удалять если знаешь, что возвращается указатель на память, выделенную внутри функции. |
|||
|
||||
| S.A.P. |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Любитель
Тут удалять ничего не надо
метод Close() у тебя должен вызываться и для CInternetSession. |
||||||
|
|||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 1 Всего: 92 |
И почему это не надо. Вот Close - сам вызовется (при удалении), а память, выделенную на объект освободить? |
|||
|
||||
| Mayk |
|
||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 1 Всего: 134 |
Ссылки тоже рулят. Кстати, а мне непонятен смысл проверки на NULL:
Delete плюсов, ровно как и free Си, не должен делать что-либо, если переданный указатель NULL. Смотрите:
Неужели это делается только для того, чтобы не вызывать операторы delete? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||
|
|||||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Так, забыли мои фугкции Это я к примеру, и так вопрос-УДАЛЯТЬ или НЕ удалять все указатели...
Если !=NULL? -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 1 Всего: 134 |
Coocky
Читать документацию. Если сказано удалять - удаляй. Если нет - то даже не пытайся. Некоторый ф-ции(например, в ANSI C readdir) возвращают указатели на статические переменные. Если попробуешь удалить, то будет ой. А с NULLом при удалении ИМХО сравнивать не стоит. Разве ты часто operator delete перегружаешь? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Ну ты сказал! Как будто указатели, кроме хипа, никуда больше не могут указывать. Наоборот, никогда не надо освобождать указатель, не тобою выделенный, за исключением случаев, когда в описании процедуры прямо сказано, что за освобождение памяти отвечает вызывающий код. Что касается CWnd::GetDlgItem - точно не надо ничего освобождать. Эта функция может вернуть как указатель на временный динамический объект, так и на где-то лежащую переменную. В первом случае MFC сам почистит память, во-втором - понятно, что удалять ни в коем случае нельзя. Упс! Не заметила большого продолжения. Вобщем, Mayk, все то же самое уже сказал. Это сообщение отредактировал(а) Earnest - 19.7.2005, 18:00 -------------------- ... |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: нет Всего: 172 |
А какой смысл возвращать указатель на стек? -------------------- |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 1 Всего: 134 |
Хотя бы для удобства. Допустим нам быстро надо скопировать две строки в третью. При возвращении указателей это делается в одну строчку.
Очень удобно. (после небольшой тренировки этот код вызывает не больше проблем чтения, чем while(*i++=*j++)). Кроме того, указатель может указывать так же и на статические переменные. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Функция может возвращать указатель на статическую/глобальную переменную - напр., AfxGetMainWnd(). Функция-член класса может возвращать указатель на что-нибудь внутри объекта... Да мало ли... -------------------- ... |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 1 Всего: 134 |
Еще вспомнил такую функция, как alloca() - выделение памяти в стеке. Правда она не очень распространена, но всё же. При выходе из функции память автоматически освобождается. Этакий auto_ptr со времён си. Разумеется, удалить выделенный таким образом объект практически невозможно иначе как выйти из функции.
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |