Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14

Здесь есть возможность читать онлайн «Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2016, ISBN: 2016, Издательство: Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Эффективный и современный С++
В книге рассматриваются следующие темы. Освоение С++11 и С++14 — это больше, чем просто ознакомление с вводимыми этими стандартами возможностями (например, объявлениями типов
, семантикой перемещения, лямбда-выражениями или поддержкой многопоточности). Вопрос в том, как использовать их эффективно, чтобы создаваемые программы были корректны, эффективны и переносимы, а также чтобы их легко можно было сопровождать. Именно этим вопросам и посвящена данная книга, описывающая создание по-настоящему хорошего программного обеспечения с использованием C++11 и С++14 — т.е. с использованием современного С++.
■ Преимущества и недостатки инициализации с помощью фигурных скобок, спецификации
, прямой передачи и функций
интеллектуальных указателей
■ Связь между
,
, rvalue-ссылками и универсальными ссылками
■ Методы написания понятных, корректных,
лямбда-выражений
■ Чем
отличается от
, как они используются и как соотносятся с API параллельных вычислений С++
■ Какие из лучших методов “старого” программирования на С++ (т.е. С++98) должны быть пересмотрены при работе с современным С++
Более чем 20 лет книги
серии
являются критерием уровня книг по программированию на С++. Понятное пояснение сложного технического материала принесло ему всемирную известность. Он всегда самый желанный гость на международных конференциях, а его услуги консультанта широко востребованы во всем мире.
Скотт Мейерс Эффективный и современный С++, После изучения основ С++ я перешел к изучению того, как применять С++ в промышленном программировании, с помощью серии книг Скотта Мейерса Эффективный С++. Эффективный и современный С++ — наиболее важная из книг серии, предлагающая ключевые рекомендации, стили и идиомы, позволяющие эффективно использовать современный С++. Вы еще не купили эту книгу? Сделайте это прямо сейчас. Герб Саттер,
глава Комитета ISO по стандартизации С++, специалист в области архитектуры программного обеспечения на С++ в Microsoft

Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Обычный указатель. При таком подходе, если уничтожается А, а Спродолжает указывать на В, Вбудет содержать указатель на А, который становится висящим. Вне в состоянии этого определить, а потому Вможет непреднамеренно этот указатель разыменовать. В результате получается неопределенное поведение.

Указатель std::shared_ptr . В этом случае Аи Всодержат указатели std::shared_ptrодин на другой. Получающийся цикл std::shared_ptr( Ауказывает на В, а Вуказывает на А) предохраняет и А, и Вот уничтожения. Даже если Аи Внедостижимы из других структур данных программы (например, поскольку Сбольше не указывает на В), счетчик ссылок каждого из них равен единице. Если такое происходит, Аи Воказываются потерянными всех практических применений: программа не в состоянии к ним обратиться, а их ресурсы не могут быть освобождены.

Указатель std::weak_ptr . Это позволяет избежать обеих описанных выше проблем. Если уничтожается А, указатель в Bстановится висящим, но Вв состоянии это обнаружить. Кроме того, хотя Аи Вуказывают друг на друга, указатель в Вне влияет на счетчик ссылок А, а следовательно, не может предотвратить удаление А, когда на него больше не указывает ни один std::shared_ptr.

Очевидно, что наилучшим выбором является std::weak_ptr. Однако стоит отметить, что необходимость применения указателей std::weak_ptrдля предотвращения потенциальных циклов из указателей std::shared_ptrне является очень распространенным явлением. В строго иерархических структурах данных, таких как деревья, дочерними узлами обычно владеют их родительские узлы. При уничтожении родительского узла должны уничтожаться и его дочерние узлы. В общем случае связи от родительских к дочерним узлам лучше представлять указателями std::unique_ptr. Обратные связи от дочерних узлов к родительским можно безопасно реализовывать, как обычные указатели, поскольку дочерний узел никогда не должен иметь время жизни, большее, чем время жизни его родительского узла. Таким образом, отсутствует риск того, что дочерний узел разыменует висячий родительский указатель.

Конечно, не все структуры данных на основе указателей строго иерархичны, и когда приходится сталкиваться с такими неиерархичными ситуациями, как и с ситуациями наподобие кеширования или реализации списков наблюдателей, знайте, что у вас есть такой инструмент, как std::weak_ptr.

С точки зрения эффективности std::weak_ptr, по сути, такой же, как и std::shared_ptr. Объекты std::weak_ptrимеют тот же размер, что и объекты std::shared_ptr, они используют те же управляющие блоки, что и указатели std::shared_ptr(см. раздел 4.2), а операции, такие как создание, уничтожение и присваивание, включают атомарную работу со счетчиком ссылок. Вероятно, это вас удивит, поскольку в начале этого раздела я писал, что указатели std::weak_ptrне участвуют в подсчете ссылок. Но это не совсем то, что я написал. Я написал, что указатели std::weak_ptrне участвуют в совместном владении объектами, а следовательно, не влияют на счетчик ссылок указываемого объекта . На самом деле в управляющем блоке имеется второй счетчик ссылок, и именно с ним и работают указатели std::weak_ptr. Более подробно этот вопрос рассматривается в разделе 4.4.

Следует запомнить

• Используйте s td::weak_ptrкак std::shared_ptr-oбpaзныe указатели, которые могут быть висячими.

• Потенциальные применения std::weak_ptrвключают хеширование, списки наблюдателей и предупреждение циклов указателей std::shared_ptr.

4.4. Предпочитайте использование std::make_uniqueи std::make_sharedнепосредственному использованию оператора new

Начнем с выравнивания игровой площадки для игры std::make_uniqueи std::make_sharedпротив обычных указателей. Функция std::make_sharedявляется частью C++11, но, увы, std::make_uniqueтаковой не является. Она вошла в стандарт только начиная с С++14. Если вы используете С++11, не переживайте, потому что базовую версию std::make_uniqueлегко написать самостоятельно. Смотрите сами:

template

std::unique_ptr make_unique(Ts&&... params) {

return std::unique_ptr(

new T(std::forward(params)...));

}

Как вы можете видеть, make_uniqueпросто выполняет прямую передачу своих параметров в конструктор создаваемого объекта, создает std::unique_ptrиз обычного указателя, возвращаемого оператором new, и возвращает этот указатель std::unique_ptr. Функция в данном виде не поддерживает массивы или пользовательские удалители (см. раздел 4.1), но зато демонстрирует, как с минимальными усилиями можно при необходимости создать make_unique [13] Дня создания полнофункциональной версии make_unique с минимальными усилиями поищите документ, ставший ее источником, и скопируйте из него ее реализацию. Этот документ — N3656 от 18 апреля 2013 года, его автор — Стивен T. Лававей (Stephan T. Lavavej). . Только не помещайте вашу версию в пространство имен std, поскольку иначе вы можете столкнуться с коллизией имен при обновлении реализации стандартной библиотеки до С++14.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»

Представляем Вашему вниманию похожие книги на «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»

Обсуждение, отзывы о книге «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x