|
MadOuse
|
|
delete или new (typeid(void*))(void*)15.11.2010, 02:38. Показов 2341. Ответов 1
Метки нет (Все метки)
Доброе время суток.
Пишу список. Телом каждого элемента (el) списка является void указатель(body). (предполагается что тело элемента может быть любого типа, т.е. переменные, классы, другой такой же список и т.д.) Критерий - универсальность и скорость. У меня получилось что-то типа (*el).body = new typeid(NewType); где NewType - параметр функции, void * на какую либо известную переменную и delete * (typeid(((*el).body)*) ((*el).body); (- на это компилятор ругается) При работе каждый раз определяется тип указателя. Насколько это правильно / элегантно / быстро? Может есть получше варианты? |
|
| 15.11.2010, 02:38 | |
|
Ответы с готовыми решениями:
1
Void menu(void); что это ? почему не void menu();
Delete void* |
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 15.11.2010, 06:27 | ||||||||||||
Сообщение было отмечено как решение
Решение
Если тебе нужна скорость, то делай с прямыми данными в теле. А универсальность на такой класс навешивается с помощью шаблонов: делаешь шаблон класса, в нём объявляешь параметр-базовый типа списка, тело объявляешь базового типа, а потом под каждый востребованный тип создаёшь отдельную версию класса списка. А с телом-указателем получишь искусственные тормоза даже в том случае, если этот указатель типизированный. Для нетипизированного же они ещё увеличиваются. Типизированный создаёт дополнительные тормоза только на косвенной адресации: лишние операции загрузки адреса и доступа по нему. А нетипизированный при каждом использовании требует указателей на функции сравнения, сложения, вычитания, умножения, деления, копирования, выделения и освобождения памяти, а загрузка и вызов этих адресов даёт самые капитальные тормоза из всех, что вообще можно навешать на элемент данных. Если же тебе нужна универсальность в пределах каждого списка (один элемент содержит double, другой char) то сделай абстрактный класс элемента списка вообще без тела, а от него уже наследуй элементы с каждым конкретным типом тела. Причём, все указатели на соседа должны быть объявлены как указатели на базовый класс данной иерархии (на элемент без тела).
Добавлено через 3 минуты
Добавлено через 2 минуты
Добавлено через 3 минуты Но самые большие тормоза всё равно идут от самой структуры списка: для каждого доступа к элементу надо перебрать все элементы между началом списка и требуемым элментом, каждый раз загружая адрес соседа, осуществляя доступ по этому адресу, да ещё и в цикле. Добавлено через 13 минут Лучше всего сделать динамический массив со счётчиком элементов и внутренней реализацией на основе непрерывного блока указателей на абстрактный класс без данных. При фактическом размещении данных в элементе массива, этому элементу присваивается значение указателя на потомка этого базового абстрактного класса. Добавлено через 5 минут Остаются те же тормоза типизированных указателей, но всего двух (один вычисляемый на основе указателя на начало блока) вместо длинной цепочки согласно структуре списка, искусственно удлиняемой ещё на один указатель в теле элемента. Добавлено через 3 минуты В итоге это будет работать быстрее, чем доступ к шестому элементу списка с телом-типизированным указателем или к седьмому элементу списка с прямыми данными в теле. А если в теле элемента списка валяется void*, то уже на первом элементе тормозов будет больше. Добавлено через 4 минуты В массиве же можно, не увеличивая времени доступа, хранить миллиарды элементов (лишь бы хватило памяти), что даже при прямых данных в теле элемента списка даёт секунды (если не часы, сутки или даже годы) на доступ к среднему элементу. Добавлено через 5 минут Свой вариант тоже доделай. Потом запихай в список и в массив по миллиону элементов и погоняй тест в миллион операций рандомного доступа туда и туда с засеканием общего времени.
0
|
||||||||||||
| 15.11.2010, 06:27 | |
|
Помогаю со студенческими работами здесь
2
Delete void* p = new classobject();
error C2440: 'delete' : cannot convert from 'Song' to 'void *' Что значит void(*f)()=(void(*)()func? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|