
- •Лекция 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
- •Принципы ооп
Класс weak_ptr
Weak_ptr представляет собой смарт поинтер, который не контролирует продолжительность существования объекта, на который он указывает Week_ptr представляет собой смарт поинтер, который не контролирует продолжительность существования объекта. Week_ptr может только указывать на объект, который контролируется указателем shared_ptr.
Привязка указателя weak_ptr к shared_ptr не изменяет счётчик ссылок этого указателя, следовательно, как только последний указатель типа shared_ptr будет удален, даже при наличии указателя weak_ptr, объект будет удален.
Создать указатель weak_ptr можно инициализацией его указателем типа shared_ptr. Поскольку объект может больше не существовать, то использовать указатели week_ptr для непосредственного доступа к объекту надо внимательно. Для этого следует вызвать функцию lock(),которая проверяет существование объекта, на который указывает week_ptr. Если объект существует, то метод lock() вернет указатель shared_ptr на совместно используемый объект, гарантирующий существование объекта, на который он указывает, пока существует указатель shared_ptr.
Использование динамических массивов
Операторы new и delete в C++ предназначены для резервирования и освобождения памяти под объекты по принципу, описанному в стандарте C++, который выделяет и освобождает память по одному элементу.
Набор классов allocator позволяет отделить определение от инициализации, что позволяет повысить производительность и гибко управлять памятью. Когда в приложении необходимо использовать переменное количество объектов, целесообразно использовать библиотеки str, например vector, которые поддерживают особый способ выделения и инициализации памяти. При использовании контейнерных классов используются встроенные конструкторы копирования, присваивания, удаления и так далее.
Память, резервируемая оператором new называется динамическим массивом, но при этом тип массива не создаётся. Для динамического массива, созданного с помощью оператора new, не могут быть вызваны функции такого рода, как begin, end. Зарезервированные оператором new объекты всегда инициализируются значением по умолчанию.
При списочной инициализации переданные инициализаторы используются для инициализации первых элементов массива. Если инициализаторов меньше, чем элементов массива, то остальные элементы инициализируются значением по умолчанию. Если инициализаторов больше, чем элементов, то оператор new потерпит неудачу и будет передавать исключение типа bad_array_new_length.
При использовании оператора new для резервирования массива нулевого размера он возвратит допустимый, а не нулевой указатель, который будет отличен от любого другого возвращенного оператором new. Но к значению его невозможно обратиться, так как он не указывает на элемент.
Элементы созданного массива всегда удаляются в обратном порядке.
Смарт поинтеры и динамические массивы
Чтобы использовать указатель типа uniqptr для управления динамическим массивом, после типа объекта следует расположить пару квадратных скобок. Операторы доступа к элементам (. И ->) не поддерживаются указателем uniqptr на массивы.
В отличие от указателя uniqptr, указатель sharedptr не оказывает прямой поддержки управлению динамическими массивами. Если необходимо создать sharedptr на динамический массив, надо создать собственную функцию удаления.
По умолчанию указатель sharedptr использует оператор delete для удаления объекта, на который он указывает. Если удаляемый объект представляет собой динамический массив, то при вызове оператора delete обязательно указывать [ ].