|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||||||
delete void*04.02.2010, 15:33. Показов 6508. Ответов 24
Метки нет (Все метки)
0
|
||||||
| 04.02.2010, 15:33 | |
|
Ответы с готовыми решениями:
24
Где void? |
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
| 04.02.2010, 15:42 [ТС] | |
|
Ну я лично не шибко разбираюсь в освобождении памяти. Код выполняется без ошибок. Я не могу понять когда память освободилась верно, а когда нет. Но после delete объект уже не содержит корректные данные. С другой стороны чтобы освободить память наверное нужно знать сколько весит объект. Но может ли void* дать такую информацию я не понимаю...
0
|
|
| 04.02.2010, 15:54 | |
|
память, думаю, освобождается. интересно, вызывается ли деструктор при таком удалении? можешь туда MessageBox (NULL, "kuku", "kuku", MB_OK|MB_TASKMODAL); вставить и посмотреть, выпрыгнет ли? если выполнить в дибаггере, выдает ли сообщение об утечках памяти после завершения?
Добавлено через 2 минуты да, сам экземпляр твоего объекта занимает sizeof (MyClass) байт памяти. но он может еще где-то память аллокировать, которая освобождается, например, в деструкторе. этот момент подробнее нужно изучить.
0
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||||||||||
| 04.02.2010, 16:01 [ТС] | |||||||||||
|
Да я и так всегда в дебаге сижу (MS VS 2008). Ошибок нет. Деструктор не вызвался
Плохо это... значит так можно сгребать в мусор только объекты для которых не нужен деструктор. Однако ещё не факт. Осталось понять освобождается ли память...Добавлено через 2 минуты
0
|
|||||||||||
|
|
|
| 04.02.2010, 16:09 | |
|
Память освободится, поскольку для освобождения памяти требуется знать только адрес участка (а его размер при выделении спрятан где-то в таблицах и записан в момент вызова new). При этом код у тебя работает в первую очередь потому, что так расположены звёзды (а точнее потому, что так реализована система run-time поддержки). Деструктор вызывается для того типа, какой имеет параметр delete. В твоём случае параметр имеет тип void*, поэтому никакого деструктора вызываться не будет. Если написать "delete (MyClass*)VoidLink", то вызовется класса MyClass
1
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
| 04.02.2010, 16:19 [ТС] | |
|
Короче говоря для Windows я могу так писать без опасений? (В случае если деструктор объекта не важен)
0
|
|
|
|
|
| 04.02.2010, 16:26 | |
|
Я не могу тебе ответить наверняка на твой вопрос, потому что всё это зависит от реализации run-time поддержки в конкретном компиляторе. Хрен его не знает, что там получается при множественном виртуальном наследовании и как там вообще делается каст от указателя на "средний" класс в цепочке с множественным виртуальным наследованием к указетлю на void*
Я просто не могу толком понять, зачем это тебе нужно?
0
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
| 04.02.2010, 16:29 [ТС] | |
|
Я просто хотел сделать прослойку выделения памяти которая собирала бы все созданные в функции указатели в массив void* а по завершению их удаляла. Впрочем я как всегда извращаюсь, но эксперементировать это интересно. По крайне мере без любопытсва человечество бы осталось в каменном веке) Думаю все же конкретно от этого я откажусь раз тут все так на удачу
0
|
|
|
|
|
| 04.02.2010, 16:33 | |
|
Забудь на минуту про удаление памяти. Опишина словах или на конкретном примере, как у тебя внешне будет выглядеть выделение памяти. Т.е. сделали new, а потом ручками дописали указатель к списку? А что делать, если у нас в середине процедуры стоит return, или throw? И какой смысл всего этого деяния: просто поэкспериментировать или сделать что-то полезное? Если что-то полезное, то зачем такая полезность с ограничением, что не вызывается деструктор (т.е. 99% случаев попадает под ограничение)?
0
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||
| 04.02.2010, 16:40 [ТС] | |||
Ну у списка есть дестуктор, он освободит ресурсы там.
В общем delete void* делать не стоит)
0
|
|||
|
|
|||||||||||
| 04.02.2010, 16:46 | |||||||||||
|
> Ну у списка есть дестуктор, он освободит ресурсы там
Ответ неверный. Собственно одно из стандартных заблуждений. Когда ты пишешь
0
|
|||||||||||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
| 04.02.2010, 16:53 [ТС] | |
|
ну если бы были объекты для который не нужен деструктор то можно было бы сделать так?
0
|
|
|
|
||
| 04.02.2010, 16:56 | ||
|
Что бы хранить массивы объектов есть куча контейнеров (для примера std::vector), при разрушении которого будут вызваны соотв. деструкторы объектов, помещенных в контейнер.
0
|
||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 04.02.2010, 17:10 | |
|
insideone, вместо довольно бессмысленных таки экспериментов рекомендовал бы потратить свободное время более целесообразным (с моей точки зрения, конечно) образом: погуглить по именам авторов Элджер, Мейерс, Саттер, Александреску, Джосаттис (иногда пишут Джосьютис) и скачать и почитать их книги (ну или погуглить Alger, Mayers, Sutter, Josuttis, Alexandresku.....)
0
|
|
| 04.02.2010, 17:36 | |||
|
Добавлено через 3 минуты в деструкторе вектора удалится память только под вектор (под его четыре указателя, каквые составляют в большинстве реализаций сам вектор). а сами объекты, на которые указывали эти указатели, будут ждать освобождения памяти, выделенной под приложение.
0
|
|||
|
|
|||||||
| 04.02.2010, 17:47 | |||||||
а для разных типов можно сделать базовый шаблон
0
|
|||||||
|
Maniac
|
||||||
| 04.02.2010, 18:30 | ||||||
|
Можно такой фигни по навыдумывать..
![]()
1
|
||||||
| 04.02.2010, 18:30 | |
|
Помогаю со студенческими работами здесь
20
delete vs. delete [] Backspace и Delete Ошибка E2044 - operator delete must return void
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|