оператор new в С++, надо ли делать delete?
Да.
Собственно, это и есть классический вариант утечки памяти. Для каждого new должен быть свой delete.
Но отчего же иногда пишут, что деструкторы вызываются автоматически когда по ходу выполнения программы она выходит за пределы блока, где память была выделена с помощью new?
Но отчего же иногда пишут, что деструкторы вызываются автоматически когда по ходу выполнения программы она выходит за пределы блока, где память была выделена с помощью new?это пишут или полные дауны или не про Си++
вощем давай ссылку где такое видел
Деструктор автоматически вызовется если ты напишешь
SomeClass instance1(someParam1);
SomeClass instance2(someParam2);
и так далее.
это пишут или полные дауны или не про Си++походу, я все позабыл, там пишется про область видимости, а про время жизни пишут, что она от точки создания до конца программы или явного его освобождения
вощем давай ссылку где такое видел
А вот, скажите, следующая конструкция безопасна?
SomeClass obj = SomeClass(SomeParam1);
...
obj = SomeClass(SomeParam2);
...
obj = SomeClass(SomeParam3);
А вот, скажите, следующая конструкция безопасна?std::auto_ptr там будет безопасен.
Да (при условии, что нет косяков в конструкторе/деструкторе).
дописал delete в каждом случае
Вероятнее всего вы правы.
Вот это подход!
Никакой delete не нужен тебе. Все нормально было.
Если ты работаешь с указателями, тогда new/delete тебе в помощь. Если с самими объектами, тогда ничего тебе не надо.
СЗМ!
безграмотные ответы заплюсованы , правильные - заминусованы....
кто-нить объяснит, почему std::auto_ptr здесь не подходит ?
(вообще я не помню точно, но по лигике вещей он должен в операторе копирования удалять объет, если он им владеет)
вообще я не помню точно, но по лигике вещей он должен в операторе копирования удалять объет, если он им владеет
это называется "так не доставайся же ты никому!"
дописал delete в каждом случаетолько имей в виду, что если перед вызовом delete есть код, который может породить исключение, ты все равно будешь получать учечку в случае возникновения исключения (это означает, например если у тебя исключения используются именно для обработок ошибок, что при тестировании и сопровождении все будет работать, а при непрерывном "боевом" использовании все рано или поздно упадет из-за нехватки памяти... )
я оставил код с указателями, new и delete
я оставил код с указателями, new и deleteКод стал бы более правильным, и даже немного более коротким, если бы ты написал
#include <memory>
...
std::auto_ptr<SomeClass> pc(new SomeClass);
...
pc = std::auto_ptr<SomeClass>(new SomeClass);
...
pc = std::auto_ptr<SomeClass>(new SomeClass);
Оставить комментарий
Elina74
если я сделаю нечто вродеvoid SomeFunction{
SomeClass* ptr = new SomeClass(SomeParam1);
...
ptr = new SomeClass(SomeParam2);
...
ptr = new SomeClass(SomeParam3);
...
}
нигде не делая delete, это может мне грозить утечкой памяти?
При этом ptr используется только внутри SomeFunction, которая используется несколько раз.