У меня есть map
Я использую для быстрого доступа к некоторым элементам моей программы. Я хочу удалить некоторые из этих элементов из моего map
(у меня есть ссылки на них в другом месте). Есть ли способ удалить эти элементы, не вызвав их деструкторы функциями map
clear()
или erase()
?Возможно ли выгрузить содержимое карты без вызова деструкторов объектов?
ответ
Если вы указываете указатели на объекты, сами объекты не будут уничтожены. Если сами объекты находятся на карте, они будут уничтожены.
Я сопоставляю
Указатели на объект уничтожаются, а не объекты с указателем. Похоже, что что-то не так или смутно. –
Добавляете ли вы 'std :: auto_ptr
No.
Если элементы сохранены по значению, не существует никакого способа сделать это. Если вам нужна эта возможность, подумайте о том, чтобы поместить их в интеллектуальные указатели (например, unique_ptr
, что позволяет использовать .release()
удерживаемый указатель).
Использование shared_ptr, вот для чего оно предназначено. Если элементы хранятся «окончательно» в другом месте, рассмотрите использование weak_ptr на карте и shared_ptr для окончательного местоположения магазина.
Возможно, существуют другие методы, которые могут работать, но сэкономить головную боль и использовать правильный инструмент для работы.
Нет; единственным стандартным контейнером с методом splice()
является std::list
. Это означает, что вы можете перемещать узлы списка из одного списка в другой, но не отображать или устанавливать узлы.
До сих пор мы слышали, что у вас есть контейнер, в котором значения являются указателями. Я предполагаю, что ключом являются тривиальные типы, такие как целые числа, или, может быть, std :: strings. И вы говорите, что ваша программа «вылетает», когда вы вызываете карту <> :: clear(). Это говорит о том, что перед вызовом clear() у вас есть некоторая коррупция памяти, потому что я не вижу причин, по которым сбрасывание простых типов значений может привести к сбою.
Попробуйте запустить программу под valgrind, чтобы обнаружить ошибки доступа к памяти. У вас, вероятно, есть один.
- 1. Переопределение деструкторов без вызова их родителей
- 2. Возможно ли автоматическое создание деструкторов в C++?
- 3. Как применять порядок вызова деструкторов
- 4. Последовательность вызова конструкторов и деструкторов?
- 5. Как указать порядок вызова деструкторов?
- 6. Является ли явным вызовом дочерних деструкторов также вызов родительских деструкторов
- 7. Пропуск глобальных деструкторов C++
- 8. Порядок вызова конструкторов/деструкторов в наследовании
- 9. Наследование классов без виртуальных деструкторов
- 10. Возможно ли изменить содержимое карты места на карте google
- 11. Удаляет ли [] освобождение памяти за один раз после вызова деструкторов?
- 12. Возможно ли «пройти» содержимое структуры?
- 13. Выгрузить мини-драйвер без разгрузки?
- 14. Избегайте среза объектов для не виртуальных деструкторов
- 15. Возможно ли размещать карты Google?
- 16. Можно ли выгрузить данные отношений объектов sqlalchemy после загрузки?
- 17. Единичные испытания деструкторов?
- 18. Возможно ли, что небольшие SD-карты отформатированы без MBR?
- 19. Возможно ли использовать опцию автозаполнения во входном поле без карты
- 20. Возможно ли создание динамических объектов?
- 21. Возможно ли изменить содержимое окна.location без перенаправления страницы?
- 22. Проверить содержимое карты без увеличения размера
- 23. выгрузить содержимое - главное меню actionscript 3
- 24. Возможно ли создание контента CallOut без вызова open()
- 25. Возможно ли создать экземпляр класса Ruby без вызова инициализации?
- 26. Возможно ли получить битмап из Uri без вызова getContentResolver()?
- 27. возможно ли СИГНАЛ без вызова отката? на db2?
- 28. Возможно ли создать экземпляр объекта в Java без вызова конструктора?
- 29. Возможно ли запустить сценарии Node.js без вызова `node`?
- 30. Возможно ли перечислить содержимое встроенных папок?
Какую цель ставите перед собой? Что плохого в том, что вызвали деструкторы? –
Я рассматриваю карту как показатель для моей большей программы. Когда мне больше не нужны элементы в этом индексе, я все равно нуждаюсь в них в других частях программы. – finiteloop
Тогда вы должны использовать указатели какого-то типа в виде сопоставленного типа. –