Skip to content

This repository is for the Homework #1 on the Multithreaded Programming in C++ at VK x BMSTU, ML Track, 2nd semester

Notifications You must be signed in to change notification settings

IRussianGamerI/MP_CPP_HW1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MP_CPP_HW1

Задание

std::shared_ptr

Реализуйте аналог std::shared_ptr + std::make_shared. shared_from_this реализовывать не нужно. Не забудьте про поддержку типов-массивов. Кастомный deleter - по желанию.

P.S. Желание делать deleter не возникло

Реализация

Находится в файле include/shared_ptr.h

В качестве аналога std::shared_ptr я разработал класс smart_pointer::shared_ptr, который по большей части реализует почти все методы std::shared_ptr, а именно:

  • Конструкторы для создания пустого указателя
  • Конструктор от адреса, который приводится к типу указателя
  • Конструкторы копирования и копирования с перемещением
  • Оператор присваивания и оператор присваивания с перемещением
  • Оператор разыменования
  • Оператор -> (для скалярных типов)
  • Оператор [] (для массивов)
  • Метод get()
  • Методы reset() и reset(T*)
  • Метод use_count()
  • Приватный метод release(), используемый в деструкторе, некоторых операторах и reset

Также была разработана функция smart_pointer::make_shared, которая позволяет более удобно создавать экземпляры shared_ptr. По части ее перегрузок, реализованы все стандартные, кроме тех, что с deleter'ами.

smart_pointer::shared_ptr и smart_pointer::make_shared поддерживают типы-массивы практически идентично стандарту.

В реализации я старался по максимуму использовать новые возможности C++17 и C++20, такие как std::is_array и requires для упрощения написания кода.

Тестирование

Папка tests

Юнит-тесты написаны с помощью библиотеки GTest, интеграционные тесты используют в качестве таргета программу-обертку и запускаются в консоли с помощью bash.

Сборка

Для сборки проекта рекомендуется использовать CMake актуальной версии и необходим компилятор, поддерживающий C++20. Для тестирования необходимо установить библиотеку GTest и valgrind (для интеграционных тестов).

В корне проекта находится файл CMakeLists.txt, который содержит все необходимые инструкции для сборки проекта.

Для сборки проекта необходимо выполнить следующие команды:

mkdir build
cd build
cmake ..
make

В результате будут созданы исполняемые файлы в подпапках exe и tests.

Запуск

Программа-обертка

Программа-обертка после сборки находится в папке build/exe. Для запуска необходимо выполнить команду:

./build/exe/wrapper

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

Она представляет собой иллюстрацию принципа полиморфизма в C++.

Юнит-тесты

Юнит-тесты находятся в папке build/tests. Для запуска необходимо выполнить команду:

./build/tests/tests

Интеграционные тесты

Интеграционные тесты находятся в папке tests/integr. Для запуска необходимо выполнить команду:

bash tests/integr/tests.sh

About

This repository is for the Homework #1 on the Multithreaded Programming in C++ at VK x BMSTU, ML Track, 2nd semester

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published