|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
Добавление своего типа данных в map04.12.2019, 15:36. Показов 1971. Ответов 18
Метки нет (Все метки)
Приветствую всех. Сделал тестовый пример:
m выходит за область видимости. Но откуда еще 2 деструктора и где относящиеся к ним конструкторы?
0
|
||||||
| 04.12.2019, 15:36 | |
|
Ответы с готовыми решениями:
18
Нужен совет по созданию своего типа данных Передача в контейнер map пользовательского типа данных sort для своего типа данных |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 04.12.2019, 16:33 | |||||||
std::pair, потом в map, на каждое перемещение отрабатывает деструкторДобавлено через 1 минуту Используй emplace, вместо insert
1
|
|||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 04.12.2019, 16:38 [ТС] | |
|
oleg-m1973, спасибо. Но есть проблема. У меня система, где у map нет метода emplace. Как быть в этом случае?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 04.12.2019, 16:43 | ||
|
1
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 04.12.2019, 16:50 [ТС] | ||
|
Не могу сообразить как выйти из этой ситуации...
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 04.12.2019, 17:00 | |||||||
Если unique_ptr тоже не поддерживается, сделай std::map<string, A*>, только не забывай удалять эти указатели Добавлено через 1 минуту Кстати, что у тебя за компилятор, может просто обновить его?
0
|
|||||||
|
фрилансер
6446 / 5641 / 1128
Регистрация: 11.10.2019
Сообщений: 15,009
|
||||||
| 04.12.2019, 18:14 | ||||||
|
в старых компиляторах можно попробовать поискать тут (в VS9 уже есть)
0
|
||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||
| 05.12.2019, 08:41 [ТС] | ||||
.В общем, решил просто нормально запрограммировать свой класс, определив в нем не только конструктор по умолчанию, но и конструктор копирования и оператор присваивания копированием (правило трех). Так как объект класса управляет файлом, то при создании копии объекта эта копия должна управлять тем же файлом. Кроме этого, при удалении одного из объекта (оригинала или копии) необходимо учитывать, нет ли "в живых" другого объекта, который управляет тем же файлом. Тогда можно будет спокойно использовать метод insert через make_pair.
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 05.12.2019, 10:52 | ||
|
А ещё лучше, напиши свой класс, аналог shared_ptr, он довольно простой и решит все твои проблемы
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
| 05.12.2019, 11:40 [ТС] | ||||||
|
Croessmah, добавление
const избавило от одной пары конструктор копирования - деструктор. Спасибо.Теперь столкнулся с другой проблемой. Если обратиться в контейнере к существующему в нем элементу по ключу, то происходит вызов конструктора по умолчанию (без этого конструктора код обращения к элементу вообще не компилится), затем конструктора копирования, затем два раза деструктор. Все усложняет еще то, что этот же код в онлайн компиляторе работает без вызова конструкторов и деструкторов при обращении к элементу. Можете объяснить, что в моей STL библиотеке не так? Тестируемый код: Кликните здесь для просмотра всего текста
Результат моего компилятора: Кликните здесь для просмотра всего текста
Начало программы --------------------------------------------------
Files.insert(make_pair<const string, IFile>(File, IFile())); ------ IFile() IFile(const IFile& iFile) IFile(const IFile& iFile) ~IFile() ~IFile() Files[File]; ------------------------------------------------------ IFile() IFile(const IFile& iFile) ~IFile() ~IFile() Files.clear(); ---------------------------------------------------- ~IFile() Конец программы --------------------------------------------------- Результат онлайн компилятора (тип компилятора выбран С++): Кликните здесь для просмотра всего текста
Начало программы --------------------------------------------------
Files.insert(make_pair<const string, IFile>(File, IFile())); ------ IFile() IFile(const IFile& iFile) IFile(const IFile& iFile) ~IFile() ~IFile() Files[File]; ------------------------------------------------------ Files.clear(); ---------------------------------------------------- ~IFile() Конец программы ---------------------------------------------------
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 05.12.2019, 11:43 | ||
|
0
|
||
|
фрилансер
6446 / 5641 / 1128
Регистрация: 11.10.2019
Сообщений: 15,009
|
||||||
| 05.12.2019, 11:46 | ||||||
|
d7d1cd, у make_pair можно не указывать параметры шаблона, он их выведет
Наверное, в онлайн компиляторе тоже оптимизатор поработал
0
|
||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||
| 05.12.2019, 12:25 [ТС] | |||
|
1. Вы внимательно прочитали сообщение?
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 05.12.2019, 12:30 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 05.12.2019, 12:33 [ТС] | ||
|
Частично разобрался почему при обращении к существующему элементу вызываются конструкторы. Все из-за того, что в моей реализации STL оператор [] вызывает метод insert (что даже указано в справке) без предварительной проверки на существование элемента. Естественно, метод insert требует сконструированный объект.
0
|
||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 05.12.2019, 15:14 | |
|
0
|
|
|
Неэпический
|
|
| 05.12.2019, 15:18 | |
|
0
|
|
| 05.12.2019, 15:18 | |
|
Помогаю со студенческими работами здесь
19
Использование vector insert и своего типа данных
Можно ли реализовать Map от своего класса?
добавление в map Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД 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-динозавры, а новое поколение лёгких потоков. Откат?. . .
|