Любой мутирующий алгоритм, который перемещает элементы, меняя их. Важным примером являетсяstd::sort(); примерами небезопасных алгоритмов являютсяstd::unique()иstd::remove()..
Это единственный способ, которым функция может быть реализована без исключений; поскольку копи-конструктор ключа может бросать, и поскольку аргументы функции не гарантированно оцениваются слева направо, мы должны убедиться, что оценка первого аргумента не бросает. Передача ключа в качестве ссылки достигает именно этого.
Разве это не очень неэффективно? Это связано с тем, что это действительно доступно; накладные расходы составляют одну кучу, которая относительно невелика по сравнению с клонированием N-объектов.
Проблема относится к относительно сложному способу поддержки C++. Объектно-ориентированное программирование в связи с контейнерами указателей на полиморфные объекты. На языке без сбора мусора вы в конечном итоге используете либо контейнер с умными указателями, либо контейнер, который принимает на себя ответственность за указатели. Самое сложное — найти безопасное, быстрое и элегантное решение.
Короткий ответ: да, они быстрее и используют меньше памяти; на самом деле, они являются единственным способом получить нулевую отметку C++. Умные указатели обычно имеют одно слово или более накладных расходов памяти на указатель, потому что количество ссылок должно поддерживаться. И поскольку количество ссылок должно поддерживаться, есть также время выполнения. Если ваши объекты большие, то накладные расходы на память часто незначительны, но если у вас много маленьких объектов, это не так. Более подробную информацию можно найти в этих ссылках:и.
Хранение нулевого указателя в списке указателей не вписывается в объектно-ориентированную парадигму. Наиболее элегантным дизайном является использование шаблона Null-Object, где в основном создается конкретный класс с фиктивными реализациями виртуальных функций.Подробности.
Copyright:
Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).
Статья Boost Pointer Container Library раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.