Скотт Мейерс - Эффективный и современный С++. 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», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

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

Интервал:

Закладка:

Сделать

auto delInvmt1 = [](Investment* pInvestment)

{ // Пользовательский удалитель

makeLogEntry(pInvestment); // как лямбда-выражение

delete pInvestment; // без состояния

};

template // Возвращаемый тип имеет размер

std::unique_ptr<Investment, // Investment*

decltype(delInvmt1)>

makeInvestment(Ts&&... args);

void delInvmt2(Investment* pInvestment) // Пользовательский

{ // удалитель как

makeLogEntry(pInvestment); // функция

delete pInvestment;

}

template // Возвращаемый тип имеет размер

std::unique_ptr<Investment, // Investment* плюс как минимум

void (*)(Investment*)> // размер указателя на функцию!

makeInvestment(Ts&&... params);

Удалители в виде функциональных объектов с большим размером состояния могут привести к значительным размерам объектов std::unique_ptr. Если вы обнаружите, что пользовательский удалитель делает ваш интеллектуальный указатель std::unique_ptrнеприемлемо большим, вам, вероятно, стоит изменить свой дизайн.

Фабричные функции — не единственный распространенный способ использования std::unique_ptr. Эти интеллектуальные указатели еще более популярны в качестве механизма реализации идиомы Pimpl (указателя на реализацию). Соответствующий код не сложен, но его рассмотрение отложено до раздела 4.5, посвященного данной теме.

Интеллектуальный указатель std::unique_ptrимеет две разновидности: одну — для индивидуальных объектов ( std::unique_ptr), а другую — для массивов ( std::unique_ptr). В результате никогда не возникает неясность в том, на какую сущность указывает std::unique_ptr. API std::unique_ptrразработан так, чтобы соответствовать используемой разновидности. Например, в случае указателя для одного объекта отсутствует оператор индексирования ( operator[]), в то время как в случае указателя для массива отсутствуют операторы разыменования ( operator*и operator->).

Существование std::unique_ptrдля массивов должно представлять только интеллектуальный интерес, поскольку std::array, std::vectorи std::stringпочти всегда оказываются лучшим выбором, чем встроенные массивы. Я могу привести только одну ситуацию, когда std::unique_ptrимеет смысл — при использовании С-образного API, который возвращает встроенный указатель на массив в динамической памяти, которым вы будете владеть.

Интеллектуальный указатель std::unique_ptrпредставляет собой способ выражения исключительного владения на С++11, но одной из наиболее привлекательных возможностей является та, что его можно легко и эффективно преобразовать в std::shared_ptr:

std::shared_ptrsp = // Конвертация std: :unique_ptr

makeInvestment( arguments ); // в std::shared_ptr

Это ключевой момент, благодаря которому std::unique_ptrнастолько хорошо подходит для возвращаемого типа фабричных функций. Фабричные функции не могут знать, будет ли вызывающая функция использовать семантику исключительного владения возвращенным объектом или он будет использоваться совместно (т.e. std::shared_ptr). Возвращая std::unique_ptr, фабрики предоставляют вызывающим функциям наиболее эффективный интеллектуальный указатель, но не мешают им заменить этот указатель более гибким. (Информация об интеллектуальном указателе std::shared_ptrприведена в разделе 4.2.)

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

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

• По умолчанию освобождение ресурсов выполняется с помощью оператора delete, но могут применяться и пользовательские удалители. Удалители без состояний и указатели на функции в качестве удалителей увеличивают размеры объектов std::unique_ptr.

• Интеллектуальные указатели std::unique_ptrлегко преобразуются в интеллектуальные указатели std::shared_ptr.

4.2. Используйте std::shared_ptrдля управления ресурсами путем совместного владения

Программисты на языках программирования со сборкой мусора показывают пальцами на программистов на С++ и смеются над ними, потому что те озабочены предотвращением утечек ресурсов. “Какой примитив! — издеваются они. — Вы что, застряли в 1960-х годах и в Lisp? Управлять временем жизни ресурсов должны машины, а не люди”. Разработчики на С++ не остаются в долгу: “Вы имеете в виду, что единственным ресурсом является память, а время освобождения ресурса должно быть принципиально неопределимо? Спасибо, мы предпочитаем обобщенность и предсказуемость деструкторов!” Впрочем, в нашей браваде есть немного бахвальства. Сборка мусора в действительности достаточно удобна, а управление временем жизни вручную действительно может показаться похожим на создание микросхем памяти из шкуры медведя с помощью каменных ножей. Почему же не получается взять лучшее из двух миров — систему, которая работает автоматически (как сборка мусора) и к тому же применима ко всем ресурсам и имеет предсказуемое время выполнения (подобно деструкторам)?

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

Интервал:

Закладка:

Сделать

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

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


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

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

x