Главная » Просмотр файлов » А. Александреску - Современное проектирование на C++

А. Александреску - Современное проектирование на C++ (1119444), страница 52

Файл №1119444 А. Александреску - Современное проектирование на C++ (А. Александреску - Современное проектирование на C++) 52 страницаА. Александреску - Современное проектирование на C++ (1119444) страница 522019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 52)

7.2. Реализация стратегии оипегзнтр, основанной на подсчете ссылок, выглядит следуюшим образом. Сежр1ате <с1аьа Р> с1ааа аегсоипсед ипзтяпед тпс* рсоипс „ ргосессед: яегсоипседО : рсоипс (пеи ипзтопед тпс(1)) (] Р с1опе(сопев Р й ча1) ( ++*рсоипс гесигп ча1; Ьоо1 яе1еазе(сопев яй) т'г (1--*рсоипс ) ( де1есе рсоипс гесигп сгие; гесигп га1зе1" ) елим ( дезсгисст'чесору = га!зе ) ; // см. ниже Реализовать эту стратегию на основе других схем подсчета ссылок так же просто.

Рассмотрим реализацию стратегии Оипегзн(р для СОМ-объектов. Эти объекты имеют две функции; адд гег и яе1еазе. При последнем вызове функции яе1еазе объект разрушается. Нужно лишь передать адрес функции С1опе в качестве параметра функции дддаег и адрес функции яе1еазе в качестве параметра функции яе1еазе, принадлежащей СОМ-объекту. Семр1ате сс1аза Р> с1азз СОмяеФСоипсед ( риЬ)те: зсаст'с р с1опе(сопзс Рй ча1) ча1->аддяегО; гесигп ча1; ) зсасдс Ьоо1 яе1еазе(сопзс Рй ча1) ча1->яе1еазеО; гесигп га1зе; елим ( дезсгисстчесору = Ра1зе ); // см.

ниже )1 В библиотеке ).о)д определены следуюшие реализации стратегии оипегайр. ° Класс оеерсору, описанный в разделе 7.5.1. В нем предполагается, что в классе, на объекты которого ссылается указатель (роптее с1азз), реализована функция- член с1опе. ° Класс йегсоипсед, описанный в разделе 7.5.3 и в данном разделе. ° Класс яеУсоипседмт, многопоточная версия класса яеРСоипсед, ° Класс соияеусоипсед — вариант внедренного подсчета ссылок, описанный в данном разделе.

Глава 7. Интеллектуальные указатели ° Класс леГС5 пкеб, описанный в разделе 7.5.4. ° Класс пеэтгцстбчесору, описанный в разделе 7.5.5. ° Класс носору, который не определяет функцию с1опе, блокируя любой внл копирования. ° Класс л11овсопчегзтоп. ° Класс птза11овсопчегз)оп. Таблица 7.3. Конструкции стратегии Сопчегв)оп Выражение Семантика Ьоо! а!1овсопч = Если константа а11ов имеет значение тгце, класс сопчегзтоптар1<Р>::а11ов; 5еагтятг допускает иеявнос преобразование в базовый' тип указателя 7.

14.4. Стратегия С1зесИпд Как указывалось в разделе 7.10, проверять объекты класса 5магтятг можно во время инициализации и перед разыменованием. Во время проверки можно использовать макрос аззегт, исключительные ситуации, ленивую инициализацию или вообще ничего не делать. Стратегия сйескзпд оперирует классом 5согебтуре, принадлежащим стратегии 5тогаде, а не типом Роз птегтуре. (Определение стратегии 5тогаде дано в разделе 7.14.1.) Если 5 — это сохраняемый тип, определенный в реализации стратегии 5тогаде, класс сИесктар! реализует стратегии Сйеск1пд, а сИесйбпдтар1 — это объект типа Сйесйзпдтар1<5>, то применяются конструкции, указанные в табл.

7.4. Таблица 7.4. Конструкции стратегии Сйесй)пд Семантика Выражение 5 ча1це; Объект класса 5нагтятг вызывает функцию Опсйесй1пдтар1.0ппе1ац1т(ча1це); пеуац1т при вызове конструктора по умолчанию. Если в классе Сйесйт пдтмр! эта функция нс определена, конструктор по умолчанию блокируется иа этапе компиляции Объект класса 5нагтРтг вызывает Функцию Оп1пз т при вызове конструктора 5 ча1це! сйескзпдтар!.Оптп)т(ча1ое) 214 Часть П.

Компоненты 7.14.3. Стратегия Сопчегаюп Это довольно простая стратегия: она определяет булевскую статическую константу, значение которой зависит от того, разрешено в классе 5аагтРтг неявНое преобразование в базовый тип указателя или нет. Если класс СопЧегМоптмр! является реализацией стратегии Сопчегз1оп, применяются конструкции, приведенные в табл. 7.3. Базовый тип указателя класса 5магтятг определяется стратегией 5тогаде и классом 5тогадетмр1<т>.": Ро)псегтуре.

Как и следовало ожидать„в библиотеке Еок) точно определены две реализации стратегии Сопчезгз оп. Окакчанае табл. 7.4 Выражение Семантика 5 ча1це; сйесМпйтмр1.опоеге1егепсе (ча1це); Объекг класса 5магтРтг вызывает Функцию оп- оегебегепсе перед возвращением результата выполнения операторов -> и е Объект класса 5магтРтг вызывает функцию оп- Ое ген ге псе перед возвращением результата выполнения константных версий операторов -> и * сопят 5 ча1це; с)зесКзпйтмр1.опоегебегепсе (ча1це); В библиотеке ) о)с1 определены следующие реализации стратегии сйесМ по. ° Класс дззегтспес)е, использующий макрос аавегс для проверки значения перед разыменованием, ° Класс дззегтспес(с5тгзс)ет, использующий макрос аззегт для проверки значения при инициализации.

° Класс яе)естнц115тат(с, не определяющий функцию опоеУац1т. Следовательно, любая попытка вызнать конструктор по умолчанию в классе 5магтРтг приведет к появлению ошибки компиляции. ° Класс ае) естни11, возбуждающий исключительную ситуацию при попытке разыменования нулевого указателя. ° Класс яе)естнц115тгзст, не позволяющий использовать нулевой указатель в качестве начального значения (генерируя при этом исключительную ситуацию). ° Класс носпесМ, обрабатывающий ошибки в лучших традициях языков С и С++„т.е. не проверяющий их совсем.

7.15. Резюме 215 Глава 7. Интеллектуальные указатели Поздравляем! Вы добрались до конца самой длинной и обширной главы. Надеемся, ваши усилия были не напрасны. Теперь вы многое знаете об интеллектуальных указателях и вооружены лаконичным и легко настраиваемым шаблонным классом 5магтртг. Интеллектуальные указатели имитируют синтаксис и семантику простых указателей. Кроме того, они решают многие задачи, выходящие за пределы возможностей простых указателей. Эти задачи могут вкяючать управление владением и проверку значений.

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

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

Краткий обзор класса Зп1агтртг < Объявление класса 5вагтРтг тевр1ате < турепаве т, тенр1ате <с1азз> с1азз с1азв Сопчегз)опро1(су теир1ате <с1аззъ с1авв теир1ате <с1аввъ с1азз ) с1аав 5вагтРтг; Онпегзп(рро11су яе1соцптед, = О15а11оиСопчегз1оп, спеси(пдпо11су = авзегтснеск, 5тогадеро11су = оегац1т5Р5тогаде ° т — зто тип, на который указывает объект класса 5иагтртг. Тип т может быть основным или определяться пользователем.

Допускается использование типа чад д. ° Для оставшихся параметров шаблонного класса (онпегзп(рго11су, сопчег51опро1(су, снеся(пдго11су и 5тогадего11су) можно реализовать свои собственные стратегии или выбирать их по умолчанию, как показана в разделах 7.14.! — 7.14.4. 216 Часть П, Компоненты ° Шаблонный параметр оипегзпдрро11су задает стратегию владения. В качестве такай стратегии можно выбирать классы оеерсору, аеясоцптед, аетсоцптедмт, сомЯетеоаптед, аеть1пкед, оезтгаст(чесору и моСору, описанные в разделе 7.14.2.

° Шаблонный параметр сопчегз1опяо11су устанавливает, допускается ли неявное преобразование в базовый тип указателя, По умолчанию неявное преобразование запрещено. В любам случае доступ к объекту осуществляется с помощью вызова функции петтир1. В качестве реализации стратегии можно использовать классы 411оисопчегззоп и о(за11оисопчегз1оп (раздел 7.14.3). е Шаблонный параметр спеск1пдго11су задает стратегию проверки ошибок.

По умолчанию можно использовать классы 455Егтепеск, ДззегтСпесквтг1сг, яе1естнц115татбс, йе1естнц115т г1 ст и носьесм (раздсл 7П4.4). ° Шаблонный параметр 5тогадеро1(су определяет механизм хранения и доступа к объекту, По умолчанию применяется класс оеУац)т5Р5тогаде, который, будучи конкретизирован типом т, определяет ссылочный тип тб, сохраняемый тип т*, а также тип т*, возвращаемый оператором -ж В библиотеке (а)д определены также сохраняемые типы Аггау5согаде, ьосмед5тогаде и неарвтогаде (раздел 7.14.1), ФАБРИКИ ОБЪЕКТОВ Для достижения высокого уровня абстракции и модульности в объектноориентированных программах применяются механизм наследования и виртуальные функции. Полиморфизм, предоставляющий возможность отложить выбор вызываемой функции на период выполнения программы, обеспечивает повторное использование бинарного кода и его адаптацию.

Система поддержки выполнения программ автоматически распределяет виртуальные функции по соответствуюшим объектам производных классов, позволяя описать сложное поведение с помошью полиморфных примитивов. Параграф, приведенный выше, можно найти в любой книге, посвяшенной объектно-ориентированному программированию. Мы цитируем эти высказывания для того, чтобы проиллюстрировать контраст между благополучным состоянием дел в "стационарном режиме" и сложной ситуацией, складывающейся в "режиме инициализации", когда объект нужно создавать с помошью полиморфных методов. В стационарном режиме у нас уже есть указатели или ссылки на полиморфные обьекты, и мы можем вызывать соответствующие функции-члены.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее