17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
|||||||||||
1 | |||||||||||
Как освободить память после удаления объекта из вектора08.05.2015, 18:28. Показов 5971. Ответов 68
Метки нет (Все метки)
Всем доброго времени суток. Никак не могу понять как освободить память, после удаления объекта из вектора...
уже как только не пытался удалить элемент из networks, но память все равно не освобождается...
0
|
08.05.2015, 18:28 | |
Ответы с готовыми решениями:
68
Как освободить память из-под вектора объектов? Как освободить память после использования SQLite? Как освободить память после закрытия формы Как освободить память (ресурс) после его использования |
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
|
|
16.05.2015, 20:43 | 61 |
0
|
Комп_Оратор)
|
||||||
16.05.2015, 22:04 | 62 | |||||
hoggy, у меня скомпилировалось с поправками:
Противоречия ссылок в классах этим не исчерпываются. Была тема в которой обсуждались различия аргументов шаблона T& и более конкретного T (&)[/*const int*/] и было весело (мне)). Что касается просто ссылок то в языке предусмотрена возможность объявления ссылок в классе. Переменная инициализируется в конструкторе. Это отличает ссылки в коде от ссылок классах/структурах. В классе ссылка объявляется как тип, а конструкторах инициализируется как псевдоним конкретной переменной. В коде же нельзя объявить и не инициализировать ссылку одновременно. Тут ссылка в классе ведёт себя как указатель. К примеру ещё, Вы можете объявить константную ссылку в классе и инициализировать её простой ссылкой (такой конструктор можно написать запросто) и потом изменить значение через экземпляр будет нельзя, а через внешнюю ссылку можно. И тут она обладает поведением указателя. Но к массивам ссылок это не имеет прямого отношения ведь? Противоречие в дизайне? Оно уже есть и приведенный Вами пример это тоже подтверждает. Массивы ссылок не слишком бы ухудшили эту ситуацию, как таковую. Причина их отсутствия более фундаментальна как я понимаю. Насколько я помню, массивы ссылок (в отличие от ссылок на массивы) объявить нельзя по иной причине. Ссылка как псевдоним требует инициализации в момент объявления в то время как указатель (как и любой нормальный тип) может быть объявлен и инициализирован в двух независимых утверждениях. Выделение памяти в С++ вещь очень быстрая и требуется конструктор по умолчанию T() для создания массива или вектора типа T. Если тип - ссылка то конструктор по умолчанию присвоил бы ей значение намертво и это бессмысленно. Это и не даёт возможности создавать такие вещи.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
16.05.2015, 22:19 | 63 | |||||
вы ошибаетесь.
нет требования в обязательном порядке использовать дефолтные конструкторы. и массивы, и контейнеры обычно всегда можно проинициализировать чем то осмысленным: http://rextester.com/FRBP33258
0
|
Комп_Оратор)
|
|
16.05.2015, 22:30 | 64 |
То что Вы показали это массив указателей. Указатели проинициализированы адресами. Операция взятия адреса и значок ссылки почему-то в С++ одинаковы. Но в чём моя (и не только же моя, я ничего не выдумал) ошибка, если говорить о классических ссылках С++. Вопрос множества ссылок из новых стандартов в данной теме и разделе скорее всего не нужен. Хотя как знать?
То что я имел в виду относится именно к "старым и добрым" ссылкам.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.05.2015, 22:33 | 65 |
теоретически, точно так же можно было бы создать массив ссылок,
и проинициализировать их объектами. остальной текст не распарсил.
0
|
Комп_Оратор)
|
|
16.05.2015, 23:00 | 66 |
1. Теоретически? Есть источник который это утверждает?
2. Можно было бы? Это написать другие компиляторы? hoggy, Ваше выступление: Как освободить память после удаления объекта из вектора о ссылке на массив не имеет отношения к массивам ссылок и теме. Предыдущий думаете распарсили?
0
|
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
|
|
17.05.2015, 14:37 | 67 |
Опять косяк. При желании, можно и берёзу дубом назвать. Вопрос только в том, а зачем? Да, кто из нас не делал ошибок? Важно не то, что мы их делаем, а важно, что вовремя исправляем.
Добавлено через 52 минуты Не вынужден, а реализует. Увы, у компилятора нет интеллекта. Предполагать он не может .
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
17.05.2015, 15:03 | 68 |
реализует только и только, когда вынужден.
мне лениво опять подымать этот баян. даже на этом форуме можно глянуть расшифровки ассемблера от господина DiffEreD, которые иллюстрируют этот момент. считайте, что в отношении ссылок по умолчанию задействована политика __forceinline (cl вижал студии) или __forceinline="__attribute__((always_inline))" (gcc и ему подобные)
0
|
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
|
|
17.05.2015, 18:32 | 69 |
Пожалуйста, выражайтесь корректнее. Если я начну выражаться на нашем сленге 90-х годов, мало не покажется.
0
|
17.05.2015, 18:32 | |
17.05.2015, 18:32 | |
Помогаю со студенческими работами здесь
69
Освободить память вектора векторов без swap Как освободить старые ImageVew чтобы освободить память Как правильно освободить память после работы с динамическим массивом Освободить оперативную память, после удаление формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |