- •Лекция 1 Динамическая память и интеллектуальные указатели.
- •Лекция 2
- •Лекция 3
- •Исчерпание памяти
- •Лекция 4 Smart-pointer для обработки исключений
- •Создание собственного кода удаления
- •Класс unique_ptr
- •Класс weak_ptr
- •Использование динамических массивов
- •Смарт поинтеры и динамические массивы
- •Класс allocator
- •Тема 2. Обработка исключительных ситуаций
- •Лекция 7
- •Класс Exception
- •Лекция 8
- •Потоки, буферы и файл iostream
- •Перегруженная операция вставки
- •Лекция 9
- •Ввод с помощью cin
- •Тема 4. Файловый ввод/вывод
- •Лекция 10
- •Режимы открытия файла
- •Бинарные файлы
- •Лекция 11
- •Тема 5. Библиотека шаблонов Standart Template Library (stl)
- •Шаблонный класс Vector
- •Лекция 12
- •Цикл for , основанный на диапазоне
- •Обобщённое программирование
- •Лекция 13
- •Виды итераторов
- •Входные итераторы
- •Однонаправленные итераторы
- •Двунаправленные итераторы
- •Произвольного доступа
- •Лекция 14 Двунаправленные итераторы
- •Виды контейнеров
- •Лекция 15 Разработка с использованием Java-платформы
- •Этапы развития языка Java
- •Байт-код
- •Особенности языка Java
- •Программная платформа и виртуальная машина Java
- •Особенности разработки и исполнения объектно-ориентированных приложений на Java Сборка мусора в Java
- •Пакет jdk
- •Ide для работы на Java
- •Особенности настройки работы платформы Java
- •Запуск приложения на языке Java без ide
- •Особенности лексики Java
- •Примитивные типы данных Java
- •Переменные
- •Объявление переменной
- •Область и срок действия переменной
- •Преобразование и приведение типов. Автоматическое приведение и продвижение типов в выражениях. Логические выражения. Арифметические операции
- •Логические операции
- •Предшествование операций
- •Управляющие операторы
- •Операторы выбора Условный оператор if
- •Операторы цикла
- •Разновидность цикла for в стиле for each
- •Применение оператора instanceof
- •Принципы ооп
ООП
10 фев 2021
Лекция 1 Динамическая память и интеллектуальные указатели.
Глобальные объекты создаются при запуске программы и освобождается при ее завершении. Локальные автоматические объекты создаются при входе в блок, где они определены, и удаляются при выходе из блока. Статические локальные объекты создаются перед первым их использованием и удаляются при завершении приложения. Продолжительность существования динамических объектов не зависит от того, где они созданы. Они существуют пока не будут освобождены явно. Для создания безопасного динамического использования объектов библиотека С++ предоставляет SmartPointer. Они гарантируют, что объекты, на которые они указывают, будут автоматически освобождены в нужный момент. Статическая память используется для локальных и глобальных статических переменных, и статических полей класса. Стек используется для нестатических объектов определенных функций. Объекты, расположенные в статической памяти или стеке, автоматически создаются и удаляются компилятором. Приложения, используемые для динамического выделения памяти, резервирует и освобождает память во время выполнения, при этом необходимо приложению контролировать продолжительность существования объекта. Т.е. явно освобождать динамически выделенную память не нужно. При неосвобождении памяти может появиться утечка памяти. Если освободить память слишком рано, пока еще существуют указатели на нее, то указатели на несуществующую область памяти.
Wildpointer, danling pointer. Для реализации безопасной работы с динамической памяти С++ предоставляет смарт поинтер. Действует точно так же, как обычный указатель, но автоматически удаляет объект, на который он указывает, когда необходимость в этом объекте отсутствует. Библиотека С++ определяет следующие виды умных указателей:
Shared_ptr – позволяет нескольким указателям указывать на один объект. Обертывает указатель с подсчетом ссылок на динамически созданный объект.
Unique_ptr - один объект -> один указатель.
Weak_ptr – является второстепенной ссылкой на объект, управляемый указателем Shared_ptr.
Все три класса определены в заголовке memory.
Класс shared_ptr. Классы интеллектуальных указателей являются шаблонными, поэтому при создании интеллектуального указателя тип данных, на который способен указывать указатель, необходимо задать в < тип_данных >, следующих за типом указателя.
Инициализированный по умолчанию смарт поинтер хранит нулевой указатель.
Интеллектуальный указатель используется теми же способами, что и обычный. Обращение к значению интеллектуального указателя возвращает объект, на который он указывает. Когда смарт поинтер используется в логическом условии, результат проверки может свидетельствовать, не является ли указатель нулевым.
Наиболее безопасный способ резервирования и использования динамической памяти со смарт указателями является использование функции std::make_shared<object>(). Функция создает и возвращает указатель типа shared_ptr, который указывает на созданный объект, построенный из нуля или более аргументов с использованием распределителя по умолчанию. При вызове функции make_shared() следует указать тип создаваемого объекта, это подобно использованию шаблона класса, за именем функции следует указание типа в угловых скобках. Функция make_shared() использует свои аргументы для создания объекта заданного типа. Если не передать аргументы в функцию make_shared(), то объект будет проинициализирован объекту по умолчанию. Для облегчения определения типа объекта, содержащего результат вызова функции make_shared(), можно использовать ключевое слово auto. При копировании и присваивании указателя типа shared_ptr каждый из них отслеживате количество других указателей типа shared_ptr. Для реализации этой задачи в классе shared_ptr используется счетчик, называемый обычно счетчиком ссылок (or reference count). При копировании указателя shared_ptr значение счетчика увеличивается. Значение связанного с указателем shared_ptr счетчика увеличивается, когда он используется:
Для инициализации другого указателя shared_ptr
При использовании его в качестве правого оператора присвивания
При передаче его в функцию
При возврате
17 фев 2021