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

Тут можно читать онлайн Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Вильямс, год 2016. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2016
  • Город:
    Москва
  • ISBN:
    978-5-8459-2000-3
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14 - читать книгу онлайн бесплатно, автор Скотт Мейерс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Резюмируем правила С++11, управляющие специальными функциями-членами.

Конструктор по умолчанию. Правила те же, что и в С++98. Генерируется, только если класс не содержит пользовательских конструкторов.

Деструктор. Правила по сути те же, что и в С++98; единственное отличие заключается в том, что деструктор по умолчанию является noexcept(см. раздел 3.8). Как и в С++98, деструктор является виртуальным, только если виртуальным является деструктор базового класса.

Копирующий конструктор. То же поведение времени выполнения, что и в С++98: почленное копирующее конструирование нестатических данных-членов. Генерируется, только если класс не содержит пользовательского копирующего конструктора. Удаляется, если класс объявляет перемещающую операцию. Генерация этой функции в классе с пользовательским оператором копирующего присваивания или деструктором является устаревшей и может быть отменена в будущем.

Оператор копирующего присваивания. То же поведение времени выполнения, что и в С++98: почленное копирующее присваивание нестатических данных-членов. Генерируется, только если класс не содержит пользовательского копирующего оператора присваивания. Удаляется, если класс объявляет перемещающую операцию. Генерация этой функции в классе с пользовательским копирующим конструктором или деструктором является устаревшей и может быть отменена в будущем.

Перемещающий конструктори перемещающий оператор присваивания. Каждая из этих функций выполняет почленное перемещение нестатических членов-данных. Генерируется, только если класс не содержит пользовательских копирующих операций, пользовательских перемещающих операций или пользовательский деструктор.

Обратите внимание, что в приведенных правилах ничего не говорится о том, что наличие шаблона функции-члена препятствует компиляторам генерировать специальные функции-члены. Это означает, что, если Widgetимеет следующий вид:

class Widget {

template // Создание Widget

Widget(const T& rhs); // из чего угодно

template // Присваивание Widget

Widget& operator=(const T& rhs); // чего угодно

};

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

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

• Специальные функции-члены — это те функции-члены, которые компиляторы могут генерировать самостоятельно: конструктор по умолчанию, деструктор, копирующие и перемещающие операции.

• Перемещающие операции генерируются только для классов, в которых нет явно объявленных перемещающих операций, копирующих операций и деструктора.

• Копирующий конструктор генерируется только для классов, в которых нет явно объявленного копирующего конструктора, и удаляется, если объявляется перемещающая операция. Копирующий оператор присваивания генерируется только для классов, в которых нет явно объявленного копирующего оператора присваивания, и удаляется, если объявляется перемещающая операция. Генерация копирующих операций в классах с явно объявленным деструктором является устаревшей и может быть отменена в будущем.

• Шаблоны функций-членов не подавляют генерацию специальных функций-членов.

Глава 4

Интеллектуальные указатели

Поэты и композиторы пишут о любви. Иногда — о подсчетах. Иногда — и о том, и о другом одновременно. Стоит только вспомнить Элизабет Баррет Браунинг (Elizabeth Barrett Browning) с ее “Как я люблю тебя? Позволь мне счесть…” (How do I love thee? Let те count the ways.) и Пола Саймона (Paul Simon) с “Наверняка есть 50 способов уйти от любимого человека” (“There must be 50 ways to leave your lover”). Давайте и мы посчитаем причины, по которым так тяжело любить обычные встроенные указатели.

1. Их объявление не дает информации о том, указывают ли они на один объект или на массив.

2. Их объявление ничего не говорит о том, должны ли вы уничтожить то, на что он указывает, когда завершите работу, т.e. владеет ли указатель тем, на что указывает.

3. Если вы определили, что должны уничтожить то, на что указывает указатель, нет никакого способа указать, как это сделать. Должны ли вы использовать deleteили имеется иной механизм деструкции (например, специальная функция уничтожения, которой следует передать этот указатель)?

4. Если вам удалось выяснить, что требуется использовать оператор delete, то причина 1 означает, что нет никакого способа узнать, следует ли использовать оператор для удаления одного объекта ( delete) или для удаления массива ( delete[]). Если вы используете оператор неверного вида, результат будет неопределенным.

5. Если вы определили, что указатель владеет тем, на что указывает, и выяснили, каким образом уничтожить то, на что он указывает, оказывается очень трудно обеспечить уничтожение ровно один раз на каждом пути вашего кода (включая те, которые возникают благодаря исключениям). Пропущенный путь ведет к утечке ресурсов, а выполнение уничтожения более одного раза — к неопределенному поведению.

6. Обычно нет способа выяснить, не является ли указатель висячим, т.e. не указывает ли он на память, которая больше не хранит объект, на который должен указывать указатель. Висячие указатели образуются, когда объекты уничтожаются, в то время как указатели по-прежнему указывают на них.

Встроенные указатели являются острым инструментом, но десятилетия опыта показывают, что достаточно малейшей небрежности или невнимательности — и об этот инструмент можно очень сильно порезаться.

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

В С++11 имеются четыре интеллектуальных указателя: std::auto_ptr, std::unique_ptr, std::shared_ptrи std::weak_ptr. Все они разработаны для того, чтобы помочь управлять временем жизни динамически выделяемых объектов, т.e. избежать утечек ресурсов, гарантируя, что такие объекты уничтожаются соответствующим образом в нужный момент (включая генерацию исключений).

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

Интервал:

Закладка:

Сделать


Скотт Мейерс читать все книги автора по порядку

Скотт Мейерс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


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


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x