Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
#1

delete[] и принцеп его работы - C++

12.02.2013, 19:41. Просмотров 263. Ответов 3
Метки нет (Все метки)

Доброго времени суток

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

Заранее благодарен
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2013, 19:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос delete[] и принцеп его работы (C++):

Объясните правила работы с delete с указателями и массивами (корректное освобождение выделенной памяти) - C++
Указатель содержал ссылку на динамический массив. Массив удалил. Имеет ли смысл применять delete на указатель?

В чем разница между delete и delete[]? - C++
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete от delete, т.к. я попробовал...

в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! - C++
Собсно //Это типа служебного класса. (Внимание! В оригинальном коде он вложен в класс xx, но я этого не стал делать, дабы не...

Чем отличается delete[] от delete? - C++
чем отличается? delete mas от delete mas

delete[] *pointer vs. delete pointer и утечка памяти - C++
Здравствуйте! Есть класс "умного" указателя counted_ptr, который удаляет хранящийся в нём T* owned; только если кол-во владельцев...

Подскажите, как очистить файл, после его работы - C++
#include "stdafx.h" #include "stdio.h" #include "conio.h" #include "time.h" #include "stdlib.h" #include "string.h" void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.02.2013, 20:03 #2
Реализация зависит от компилятора. Это в общем-то технические детали, в которые необязательно углубляться, достаточно знать, что эти конструкции делают и с какими гарантиями.
Обычно new [] записывает в области памяти размер выделяемого массива, а delete [] его читает и действует соответственно (уничтожает элементы в порядке от конца к началу и освобождает блок памяти). К обычным new и delete это не относится.

Добавлено через 3 минуты
Служебная информация есть далеко не у каждой переменной, а только у тех объектов, которым она необходима (классы с виртуальными функциями и выделенные через new [] массивы - самые очевидные примеры). Большинство переменных чисты и прозрачны как слеза младенца.
1
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
12.02.2013, 20:09  [ТС] #3
Nick Alte, большое спасибо Первую часть я и так знал, а вот насчет 2 можно поподробней? А то меня заинтересовала эта спец. часть и как она устроена
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.02.2013, 20:26 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Спецчасть зависит от конкретных потребностей. Её реализация не конкретизируется стандартом: разработчики компиляторов могут творить что хотят, лишь бы соблюдалось описанное стандартом поведение и гарантии. Например, объект с виртуальными функциями, как правило, содержит vptr - указатель на таблицу виртуальных функций (по сути просто массив адресов функций, создаваемый компилятором для каждого класса, который их использует). Это наиболее общепринятая реализация динамического полиморфизма, однако ничто не мешает реализовать такое же поведение как-либо иначе, оставаясь в рамках стандарта. Могут быть и какие-то дополнительные vptr в середине объекта при множественном наследовании, служебные поля со смещениями при виртуальном наследовании. В общем и целом соблюдается принцип минималистичности: служебную информацию добавляют только когда она необходима и ровно столько и в том составе, в каком необходимо. Ничего лишнего.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 20:26
Привет! Вот еще темы с ответами:

"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"? - C++
Я правильно понимаю, что "delete a, b;" эквивалентно "delete a; delete b;" ?

Есть массив в виде табличных данных, как его поделить на отдельные элементы для дальнейшей работы? - C++
Есть массив в виде табличных данных,как его поделить на отдельные элементы для работы дальше?строка разделена ";",нужен кусочек тот которой...

Класс "одномерный массив" и методы для работы с его данными - C++
Описать класс одномерный массив, содержащий его элементы и их количество, а так же методы: вывода всех значений на экран, нахождения...

delete[] - C++
Здравствуйте! Имеется след. код: char* values = new char; values = '\0'; ////ещё код//// delete values; Вопрос - почему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.02.2013, 20:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru