Зачем освобождать память через delete?
От: gde11  
Дата: 11.02.04 20:11
Оценка:
Вот программа:

class Cls{
...//Переменные и методы класса.
};
int main(){
   Cls *p = new Cls;
   //что-то делаем с p.
   delete p; // Вот это зачем?
}

Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?
Re: Зачем освобождать память через delete?
От: Par-zzz  
Дата: 11.02.04 20:17
Оценка:
Здравствуйте, gde11, Вы писали:

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?


Не освобождай, в релиз версии скорее всего ничего страшного не произойдет. Но раз забьешь, два забьешь, а потом это в привычку войдет и польються memleak'и рекой.

Удачи!
/**
* у человека столько проблем, сколько он их себе создает
*/
Re: Зачем освобождать память через delete?
От: VNG Беларусь https://organicmaps.app/
Дата: 11.02.04 20:30
Оценка: 9 (1)
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

Во-первых, эта строка:
delete p;

не только освобождает память, но и вызывает деструктор класса Cls. Если он не тривиален (выполняет какие-нибудь
важные вещи типа освобождения дескрипторов ОС или закрытия файлов), то можно получить грабли.

А во-вторых, насчет освобождения памяти перед завершением программы — это филосовский вопрос. По-моему аллокатор
по умолчанию в SGI STL не освобождает память при работе с контейнерами.

не освобождает
Re[2]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 11.02.04 21:06
Оценка: 1 (1)
Par-zzz wrote:

> Не освобождай, в релиз версии скорее всего ничего страшного не произойдет.

> Но раз забьешь, два забьешь, а потом это в привычку войдет и польються
> memleak'и рекой.
Жаль windows при закрытии процесса не пишет в лог о ликах. Быстро бы надоело
его вычищать. Заодно SGI STL allocator поправили бы
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re: Зачем освобождать память через delete?
От: Шахтер Интернет  
Дата: 12.02.04 03:01
Оценка:
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

Можно положится на систему (если это хорошая система, конечно). В некоторых случаях так и делают, никакого криминала здесь нет. Однако полезно выработать привычку убирать за собой.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Зачем освобождать память через delete?
От: Vamp Россия  
Дата: 12.02.04 08:46
Оценка:
G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить
все память, выделяемую программе. Или я что-то не понимаю?
Все дело в волшебных деструкторах. Без delete система память освободит, а деструктор не вызовет. Что, естественно, рушит многие технологии современного С++ программирования, типа RAII.
Да здравствует мыло душистое и веревка пушистая.
Re: Зачем освобождать память через delete?
От: bkat  
Дата: 12.02.04 09:33
Оценка:
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

Много причин.
Например, потому что так проще...
Зачем тебе в твой код дополнительная инфа о том,
что некий код используется прямо перед завершением работы и именно этот конкретный объект
можно и не удалять. А что если ты захочешь этот код использовать еще где и уже не
перед самых выходом из программы?
В целом проще следовать одной проверенной стратегии (выделил/попользовал/удалил),
чем несколькими:
— выделил/попользовал/удалил;
— выделил/попользовал/не удалил, потому что программа скоро завершится
— выделил/попользовал/не удалил, потому что памяти еще много...
Re: Зачем освобождать память через delete?
От: semishin1  
Дата: 12.02.04 09:52
Оценка: -3
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

В таком слуае как этот и если говорить о Windows освобождать динамически участки памяти не обязательно. Операционная система сделает это сама, когда будет в систему возращать ресурсы.
... << RSDN@Home 1.1.2 stable >>
Re[2]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 12.02.04 11:12
Оценка:
Vamp wrote:

> Без delete система память освободит, а деструктор не вызовет.

Самое поразительное, что и при вызове delete может не вызваться деструктор!
Например:
#include <memory>
struct Pimpl; // определение в cpp файле

struct P
{
    std::auto_ptr<Pimpl> m_pimpl;
    ~P() {}
};


Кто не знает ответ, срочно в книжный магазин за хорошими книжками!

--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re[3]: Зачем освобождать память через delete?
От: Lorenzo_LAMAS  
Дата: 12.02.04 11:19
Оценка:
A>Кто не знает ответ, срочно в книжный магазин за хорошими книжками!

Какой ответ?
Программа содержит неопределенное поведение.
Of course, the code must be complete enough to compile and link.
Re[3]: Зачем освобождать память через delete?
От: Vamp Россия  
Дата: 12.02.04 11:22
Оценка:
A>Самое поразительное, что и при вызове delete может не вызваться деструктор!
A>
A>#include <memory>
A>struct Pimpl; // определение в cpp файле

A>struct P
A>{
A>    std::auto_ptr<Pimpl> m_pimpl;
A>    ~P() {}
A>};
A>

Это о чем пример? Он вообще не должен компилироваться...
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Зачем освобождать память через delete?
От: LaptevVV Россия  
Дата: 12.02.04 11:24
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Vamp wrote:


>> Без delete система память освободит, а деструктор не вызовет.

A>Самое поразительное, что и при вызове delete может не вызваться деструктор!
A>Например:
A>
A>#include <memory>
A>struct Pimpl; // определение в cpp файле

A>struct P
A>{
A>    std::auto_ptr<Pimpl> m_pimpl;
A>    ~P() {}
A>};
A>


A>Кто не знает ответ, срочно в книжный магазин за хорошими книжками!


А какие, по вашему, хорошие?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Зачем освобождать память через delete?
От: Lorenzo_LAMAS  
Дата: 12.02.04 11:28
Оценка:
struct Pimpl;

void g()
{
   Pimpl * p = 0;
   delete p;
}


"ComeauTest.c", line 6: warning: delete of pointer to incomplete class
delete p;
^

Of course, the code must be complete enough to compile and link.
Re[5]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 12.02.04 11:36
Оценка:
Lorenzo_LAMAS wrote:

> "ComeauTest.c", line 6: warning: delete of pointer to incomplete class

> delete p;
> ^
Хороший компилятор поможет отложить покупку хороших книг
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re[4]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 12.02.04 11:41
Оценка:
LaptevVV wrote:

> А какие, по вашему, хорошие?

Я честно говоря, хотел точную ссылку на книгу дать, но подзабыл, где это
было. Поэтому выразился абстрактно. Общий шаблон предположительно такой:
[More] (effective|exceptional) C++
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re[6]: Зачем освобождать память через delete?
От: Lorenzo_LAMAS  
Дата: 12.02.04 11:59
Оценка:
A>Хороший компилятор поможет отложить покупку хороших книг
А хороший ISO/IEC 14882 поможет отказаться от многих книг вообще.
Of course, the code must be complete enough to compile and link.
Re[5]: Зачем освобождать память через delete?
От: Vamp Россия  
Дата: 12.02.04 12:02
Оценка:
А g++ вообще отказался. Сказал, что еррор.
В любом случае, я так и не понял, о чем этот пример.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 12.02.04 12:23
Оценка:
Vamp wrote:

> А g++ вообще отказался. Сказал, что еррор.

> В любом случае, я так и не понял, о чем этот пример.
http://www.boost.org/libs/utility/checked_delete.html
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re[7]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 12.02.04 13:59
Оценка:
Lorenzo_LAMAS wrote:

> А хороший ISO/IEC 14882 поможет отказаться от многих книг вообще.

По-хорошему, еще нужен список исправленных ошибок
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re: Зачем освобождать память через delete?
От: _Stas Украина  
Дата: 12.02.04 20:51
Оценка:
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

Вот именно — вроде должна освободить память. А кто сказал, что это правда? Лучше delete пару раз где надо поставить.
Real programmers never use wizards!
Re[2]: Зачем освобождать память через delete?
От: Шахтер Интернет  
Дата: 13.02.04 01:24
Оценка:
Здравствуйте, _Stas, Вы писали:

_S>Здравствуйте, gde11, Вы писали:


G>>Вот программа:


G>>
G>>class Cls{
G>>...//Переменные и методы класса.
G>>};
G>>int main(){
G>>   Cls *p = new Cls;
G>>   //что-то делаем с p.
G>>   delete p; // Вот это зачем?
G>>}
G>>

G>>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

_S>Вот именно — вроде должна освободить память. А кто сказал, что это правда?


Я, например.

_S>Лучше delete пару раз где надо поставить.


Интересно, интересно. Где это в рассматриваемом примере надо ставить delete два раза ???
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[3]: Зачем освобождать память через delete?
От: Шахтер Интернет  
Дата: 13.02.04 02:04
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Par-zzz wrote:


>> Не освобождай, в релиз версии скорее всего ничего страшного не произойдет.

>> Но раз забьешь, два забьешь, а потом это в привычку войдет и польються
>> memleak'и рекой.
A>Жаль windows при закрытии процесса не пишет в лог о ликах. Быстро бы надоело
A>его вычищать. Заодно SGI STL allocator поправили бы
A>--
A>Александр Насонов,
A>Независимый консультант и разработчик ПО
A>alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)

Очень подмывает послать вас в магазин за хорошими книжками. Организация хипа целиком и полностью делается в user-mode. Система отвечает только за управление памятью процесса на страничном уровне.
Поэтому делать лог ликов нужно не на уровне ядра, а на уровне приложения. И, надо заметить, VC, например, это умеет делать для стандартного C run-time хипа. Пользуйтесь на здоровье.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[3]: Зачем освобождать память через delete?
От: _Stas Украина  
Дата: 13.02.04 05:11
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Здравствуйте, _Stas, Вы писали:


_S>>Здравствуйте, gde11, Вы писали:


G>>>Вот программа:


Ш>Интересно, интересно. Где это в рассматриваемом примере надо ставить delete два раза ???


Я не этот пример имел ввиду, когда писал ответ. Пару раз где надо – значит, что надо ставить delete ВЕЗДЕ после использования динамической памяти. Я стараюсь придерживаться правила – сколько new, столько и delete. В этом конкретном примере надо только 1 delete. Хотя если вы пишите по VC.NET, то там производиться сборка мусора.
Real programmers never use wizards!
Re[4]: Зачем освобождать память через delete?
От: WolfHound  
Дата: 13.02.04 06:04
Оценка:
Здравствуйте, _Stas, Вы писали:

_S>Я не этот пример имел ввиду, когда писал ответ. Пару раз где надо – значит, что надо ставить delete ВЕЗДЕ после использования динамической памяти. Я стараюсь придерживаться правила – сколько new, столько и delete. В этом конкретном примере надо только 1 delete.

А я нет. У меня в програме вобще delete не найти. Ибо религия не позволяет им пользоваться. У меня этим смартпоинтеры занимаются.
_S>Хотя если вы пишите по VC.NET, то там производиться сборка мусора.
Не правда. Даже при включение managed extensions не все объекты подвержены сборке мусора. А без них этого понятия вобще нет.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Зачем освобождать память через delete?
От: ArtDenis Россия  
Дата: 13.02.04 07:26
Оценка:
Здравствуйте, _Stas, Вы писали:

Ш>>Интересно, интересно. Где это в рассматриваемом примере надо ставить delete два раза ???

_S>Я не этот пример имел ввиду, когда писал ответ. Пару раз где надо – значит, что надо ставить delete ВЕЗДЕ после использования динамической памяти. Я стараюсь придерживаться правила – сколько new, столько и delete. В этом конкретном примере надо только 1 delete. Хотя если вы пишите по VC.NET, то там производиться сборка мусора.

А что ты будешь делать в этом случае:
void main()
{
    char *data;
    
    data = new char[10];
    
    if (func1() == false)
    {
        delete[] data;
        return;
    }

    if (func2() == false)
    {
        delete[] data;
        return;
    }
    delete[] data;
}


На один new приходится 3 delete. Нестыковочка получилась. Твою концепцию надо пересматривать.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 13.02.04 08:26
Оценка:
Шахтер wrote:

> Очень подмывает послать вас в магазин за хорошими книжками. Организация

> хипа целиком и полностью делается в user-mode. Система отвечает только за
> управление памятью процесса на страничном уровне. Поэтому делать лог ликов
> нужно не на уровне ядра, а на уровне приложения. И, надо заметить, VC,
> например, это умеет делать для стандартного C run-time хипа. Пользуйтесь
> на здоровье.
Да я же это не серьезно. Забыл только смайл поставить
А вообще, есть системы на которых user-mode и kernel-mode неотделимы. Есть
даже такие, в которых в твое приложение встраивается операционка при
сборке.
--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
Re[5]: Зачем освобождать память через delete?
От: jazzer Россия Skype: enerjazzer
Дата: 13.02.04 08:29
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, _Stas, Вы писали:


Ш>>>Интересно, интересно. Где это в рассматриваемом примере надо ставить delete два раза ???

_S>>Я не этот пример имел ввиду, когда писал ответ. Пару раз где надо – значит, что надо ставить delete ВЕЗДЕ после использования динамической памяти. Я стараюсь придерживаться правила – сколько new, столько и delete. В этом конкретном примере надо только 1 delete. Хотя если вы пишите по VC.NET, то там производиться сборка мусора.

AD>А что ты будешь делать в этом случае:

AD>
AD>void main()
AD>{
AD>    char *data;
    
AD>    data = new char[10];
    
AD>    if (func1() == false)
AD>    {
AD>        delete[] data;
AD>        return;
AD>    }

AD>    if (func2() == false)
AD>    {
AD>        delete[] data;
AD>        return;
AD>    }
AD>    delete[] data;
AD>}
AD>


AD>На один new приходится 3 delete. Нестыковочка получилась. Твою концепцию надо пересматривать. :))


автопойнтеры юзать :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: Зачем освобождать память через delete?
От: ArtDenis Россия  
Дата: 13.02.04 08:52
Оценка:
Здравствуйте, jazzer, Вы писали:
j> автопойнтеры юзать


Ээээ... воопрос вообще-то был к _Stas'у
Posted via RSDN NNTP Server 1.8 beta
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Зачем освобождать память через delete?
От: Дмитрий Наумов  
Дата: 13.02.04 14:17
Оценка:
Здравствуйте, gde11, Вы писали:

[skip]

Самое интересное, что возможно через delete не только память освобождается...
... << RSDN@Home 1.1 beta 1 >>
Re: Зачем освобождать память через delete?
От: Аноним  
Дата: 13.02.04 14:25
Оценка:
Здравствуйте, gde11, Вы писали:

G>Вот программа:


G>
G>class Cls{
G>...//Переменные и методы класса.
G>};
G>int main(){
G>   Cls *p = new Cls;
G>   //что-то делаем с p.
G>   delete p; // Вот это зачем?
G>}
G>

G>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

Для windows понятно, но
Попутно вопрос в разных версиях UNIX пямять освобождается или нет
Re[5]: Зачем освобождать память через delete?
От: Шахтер Интернет  
Дата: 14.02.04 01:23
Оценка:
Здравствуйте, alnsn, Вы писали:


A>Да я же это не серьезно. Забыл только смайл поставить

A>А вообще, есть системы на которых user-mode и kernel-mode неотделимы. Есть
A>даже такие, в которых в твое приложение встраивается операционка при
A>сборке.
A>--
A>Александр Насонов,
A>Независимый консультант и разработчик ПО
A>alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)

... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: Зачем освобождать память через delete?
От: Шахтер Интернет  
Дата: 14.02.04 01:23
Оценка:
Здравствуйте, jazzer, Вы писали:

AD>>На один new приходится 3 delete. Нестыковочка получилась. Твою концепцию надо пересматривать.


J>автопойнтеры юзать


А как быть сишникам? У них пулемёту (я хотел сказать автозамёту) нету
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[5]: Зачем освобождать память через delete?
От: Пупырь Ниоткуда  
Дата: 15.02.04 22:38
Оценка:
AD>А что ты будешь делать в этом случае:
AD>
AD>void main()
AD>{
AD>    char *data;
    
AD>    data = new char[10];
    
AD>    if (func1() == false)
AD>    {
AD>        delete[] data;
AD>        return;
AD>    }

AD>    if (func2() == false)
AD>    {
AD>        delete[] data;
AD>        return;
AD>    }
AD>    delete[] data;
AD>}
AD>


AD>На один new приходится 3 delete. Нестыковочка получилась. Твою концепцию надо пересматривать.

Вы сами эту прелесть выдумали ?

void main(){

    char *data;
    data = new char[10];
    
    if(func1())
       if(func2())

    delete[] data;
}
... << RSDN@Home 1.1.3 beta 1 >>
Re[6]: Зачем освобождать память через delete?
От: alexkro  
Дата: 15.02.04 22:58
Оценка: :)
Здравствуйте, Пупырь, Вы писали:

П>Вы сами эту прелесть выдумали ?


П>
П>void main(){

П>    char *data;
П>    data = new char[10];
    
П>    if(func1())
П>       if(func2())

П>    delete[] data;
П>}
П>


Продолжим мысль:
if (func1())
{
    if (func2())
    {
        if (func3())
        {
            if (func4())
            {
                if (func5())
                {
                    what a mess...
                }
            }
        }
    }
}
Re[6]: Зачем освобождать память через delete?
От: ArtDenis Россия  
Дата: 16.02.04 07:42
Оценка:
Здравствуйте, Пупырь, Вы писали:

П>Вы сами эту прелесть выдумали ?


П>
П>void main(){

П>    char *data;
П>    data = new char[10];
    
П>    if(func1())
П>       if(func2())

П>    delete[] data;
П>}
П>


Пойдём дальше. Если учесть, что программа не делает ничего полезного, то её можно сократить до:
void main() {}


... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[7]: Зачем освобождать память через delete?
От: Павел Кузнецов  
Дата: 16.02.04 07:55
Оценка: :)))
Здравствуйте, ArtDenis, Вы писали:

A> Пойдём дальше. Если учесть, что программа не делает ничего

A> полезного, то её можно сократить до:
A>
 A> void main() {}
 A>

A>

Учитывая, что компилятор не обязан ее компилировать, можно еще сократить:
#error return type of function "main" must be "int"

Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Зачем освобождать память через delete?
От: ArtDenis Россия  
Дата: 16.02.04 08:02
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>
ПК>#error return type of function "main" must be "int"
ПК>

ПК>

Эх, а я, избалованный Борландом, такие элементарные вещи уже подзабыл.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Зачем освобождать память через delete?
От: jazzer Россия Skype: enerjazzer
Дата: 16.02.04 08:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gde11, Вы писали:


G>>Вот программа:


G>>
G>>class Cls{
G>>...//Переменные и методы класса.
G>>};
G>>int main(){
G>>   Cls *p = new Cls;
G>>   //что-то делаем с p.
G>>   delete p; // Вот это зачем?
G>>}
G>>

G>>Я понимаю, что память надо освождать если она выделяется в цикле много раз и т. п. А надо ли это делать в приведенном примере? Ведь программа заканчивается и Windows вроде должна освободить все память, выделяемую программе. Или я что-то не понимаю?

А>Для windows понятно, но

А>Попутно вопрос в разных версиях UNIX пямять освобождается или нет

попутно ответ — всегда освобождайте память и не майтесь подобными вопросами :)

наверняка найдется версия, которая не освобождает.
Например, ДОС :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Зачем освобождать память через delete?
От: Vamp Россия  
Дата: 16.02.04 08:31
Оценка: +1
А>Для windows понятно, но
А>Попутно вопрос в разных версиях UNIX пямять освобождается или нет
У меня такое ощущение, что мы имеем дело с избытком рефлексии. Память надо освобождать. Невзирая. Не зависимо от. Точка.
Да здравствует мыло душистое и веревка пушистая.
Re[8]: Зачем освобождать память через delete?
От: Андрей Галюзин Украина  
Дата: 16.02.04 12:06
Оценка: :)
A>> Пойдём дальше. Если учесть, что программа не делает ничего
A>> полезного, то её можно сократить до:
A>>
A>> void main() {}
A>>

A>>

ПК> Учитывая, что компилятор не обязан ее компилировать, можно еще сократить:

ПК>
ПК> #error return type of function "main" must be "int"
ПК>

:))

И в итоге файл стал больше! Предлагаю его просто удалить

--
aga
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[9]: Зачем освобождать память через delete?
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 16.02.04 14:39
Оценка: :)
Андрей Галюзин wrote:

> И в итоге файл стал больше! Предлагаю его просто удалить

А я предложу добавить автоудаление при ошибке компиляции
$ g++ --autodelete-on-error test.cpp
Будет весело проблемы народа на форуме решать

--
Александр Насонов,
Независимый консультант и разработчик ПО
alnsn-mycop@yandex.ru (для более быстрого ответа удалите -мусор из адреса)
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.