GV
Galina Viktorova

C++ помогите начинающему ?



Будет ли здесь утечка в памяти ? .я вкурсе что по идеи такие вещи удаляют через delete [] .. но дэк, кто то говорит что и так приемлемо.. . просто бывают такие ситуации когда ты не знаешь твой указатель ссылается на один элемент или несколько и при применении delete [] на указатели ссылающиеся на один элемент, вылетит ошибка .. а вот просто delete работает в обоих случаях .. только мне пока не понятно насколько хорошо ..

Валерия Кулыбышева
Валерия Кулыбышева

Зависит от компилятора.

Из стандарта:

...

5.3.5 Delete

1 The delete-expression operator destroys a most derived object (1.8) or array created by a new-expression.
delete-expression:
::opt delete cast-expression
::opt delete [ ] cast-expression

....

In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10). If not, the behavior is undefined.

....

Писать такое в коде все равно, что i = i++ +++x;

Утечка, наверное, будет. В С++ вообще лучше знать что делает твой код и какую память освобождает, иначе недалеко до беды. Для тех, кто не хочет возиться с этим давно уже другие языки существуют.

Саша
Саша

будет, естественно.
и что значит "не знаешь"?
если new [] - значит, массив, пусть и из 1 элемента
если просто new - значит, только объект

Anna
Anna

Запусти код в цикле миллион раз и посмотри в диспетчере задач, жрет он память или нет. Я думаю, что нет.

ЕТ
Елена Тимошина

Это когда могут быть ситуации, что ты не знаешь, на что указывает указатель? После 3-х суток беспрерывной работы и нескольких километров кода, когда ты сам уже забыл, что создавал, а посмотреть — нет сил? В самом деле.

Максим Брюлов
Максим Брюлов

Ясное дело, если есть массив значений, можно удалить все элементы ( delete [ ] p ) и только первый ( delete p ), в обоих случаях ошибки не будет, но в первом случае - утечка памяти, т. к. следующие за удаляемым элементом (на который указывает p) остаются.

А чтобы знать, нужно либо говнокод не плодить, либо пользоваться умными классами вроде std::vector, std::list и std::string.

Похожие вопросы
C++ builder помогите начинающему
Посоветуйте хорошую книгу по Visual C++ для начинающих..?
какую лучше всего скачать программу (для начинающих) , чтобы программировать на c++
подскажите хорошие учебники по pascal и c++ для начинающих
C/C++ -помогите написать программу на C++
Оказывается нельзя начинать учить сразу C++ а надо сперва с классического Си начинать?
Какой ide лучше использовать для c++ (начинаю изучать)?
Скакой книги лучше начинать изучение c++
Посоветуйте, пожалуйста, хорошую литературу по C++ для начинающего.
Помогите с C++