Скотт Мейерс - Эффективный и современный С++. 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::weak_ptr. Рассмотрим фабричную функцию, которая производит интеллектуальные указатели на объекты только для чтения на основе уникальных значений идентификаторов. В соответствии с советом из раздела 4.1, касающегося возвращаемых типов фабричных функций, она возвращает std::unique_ptr:

std::unique_ptr loadWidget(WidgetID id);

Если loadWidgetявляется дорогостоящим вызовом (например, из-за файловых операций ввода-вывода или обращения к базе данных), а идентификаторы часто используются повторно, разумной оптимизацией будет написание функции, которая делает то же, что и loadWidget, но при этом кеширует результаты. Засорение кеша всеми затребованными Widgetможет само по себе привести к проблемам производительности, так что другой разумной оптимизацией является удаление кешированных Widget, когда они больше не используются.

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

Вот как выглядит быстрая и неаккуратная реализация кеширующей версии loadWidget:

std::shared_ptr fastLoadWidget(WidgetID id) {

static std::unordered_map

std::weak_ptr> cache;

auto objPtr // objPtr является std::shared_ptr

= cache[id].lock(); // для кешированного объекта и

// нулевым указателем для объекта,

// отсутствующего в кеше

if (!objPtr) { // При отсутствии в кеше

objPtr // объект загружается

= loadWidget(id);

cache[id] = objPtr; // и кешируется

}

return objPtr;

}

Эта реализация использует один из контейнеров С++11, представляющий собой хеш-таблицу ( std::unordered_map), хотя здесь и не показаны хеширование WidgetIDи функции сравнения, которые также должны присутствовать в коде.

Реализация fastLoadWidgetигнорирует тот факт, что кеш может накапливать просроченные указатели std::weak_ptr, соответствующие объектам Widget, которые больше не используются (а значит, были уничтожены). Реализация может быть улучшена, но вместо того чтобы тратить время на вопрос, который не привнесет ничего нового в понимание интеллектуальных указателей std::weak_ptr, давайте рассмотрим второе применение этих указателей: шаблон проектирования Observer (Наблюдатель). Основными компонентами этого шаблона являются субъекты (объекты, которые могут изменяться) и наблюдатели (объекты, уведомляемые при изменении состояний). В большинстве реализаций каждый субъект содержит член-данные, хранящие указатели на его наблюдателей. Это упрощает для субъектов проблемы уведомления об изменении состояний. Субъекты не заинтересованы в управлении временем жизни своих наблюдателей (т.e. тем, когда они должны быть уничтожены), но они очень заинтересованы в том, чтобы, если наблюдатель был уничтожен, субъекты не пытались к нему обратиться. Разумным проектом может быть следующий — каждый субъект хранит контейнер указателей std::weak_ptrна своих наблюдателей, тем самым позволяя субъекту определять, не является ли указатель висящим, перед тем как его использовать.

В качестве последнего примера применения std::weak_ptrрассмотрим структуру данных с объектами А, Ви Св ней, где Аи Ссовместно владеют В, а следовательно, хранят указатели std::shared_ptrна нее:

Предположим что было бы также полезно иметь указатель из в на А Какую - фото 3

Предположим, что было бы также полезно иметь указатель из в на А. Какую разновидность интеллектуального указателя следует использовать в этом случае?

Есть три варианта Обычный указатель При таком подходе если уничтожается А - фото 4

Есть три варианта.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x