Реализация STL-подобного контейнера Vector<T> на C++17 с ручным управлением памятью, поддержкой move/copy-семантики и гарантиями исключений.
Проект демонстрирует работу с низкоуровневой памятью, проектирование контейнеров и реализацию механизмов, лежащих в основе std::vector.
- отдельный слой сырой памяти
RawMemory<T>; - ручное выделение и освобождение памяти через
operator new/operator delete; - разделение памяти и жизненного цикла объектов.
-
управление размером и ёмкостью:
ReserveResize- автоматический рост буфера
-
модификация содержимого:
PushBackEmplaceBackPopBackInsertEmplaceErase
-
поддержка итераторов:
begin/endcbegin/cend
- конструкторы копирования и перемещения;
- операторы присваивания;
- оптимизация через
move, когда перемещение безопаснее копирования; - использование
std::is_nothrow_move_constructible_v.
Проект разделён на два уровня:
RawMemory<T>
↓
управление сырым буфером
Vector<T>
↓
управление объектами
RawMemory<T>отвечает только за выделение и освобождение памяти;Vector<T>управляет жизненным циклом объектов и логикой контейнера.
Реализована безопасная реаллокация и вставка:
- перенос элементов в новый буфер;
- откат изменений при выбросе исключений;
- корректное уничтожение уже созданных объектов.
Используются механизмы:
placement newstd::destroy_nstd::uninitialized_copystd::uninitialized_move
Проект содержит набор assert-тестов, проверяющих:
- базовые операции контейнера;
- copy/move-семантику;
- корректность создания и уничтожения объектов;
- сценарии с исключениями;
- работу с нетривиальными типами.
Для тестирования используются вспомогательные типы:
ObjTestObj
Тесты дополнительно отслеживают:
- количество конструирований;
- копирования;
- перемещения;
- уничтожения объектов.
advanced-vector/
│
├── vector.h
│ ├── RawMemory<T>
│ └── Vector<T>
│
└── main.cpp
└── assert-тесты
g++ -std=c++17 -Wall -Wextra -pedantic \
advanced-vector/main.cpp \
-o vector_tests
./vector_testsЕсли программа завершилась без ошибок, все встроенные тесты успешно пройдены.
- C++17
- STL
- Templates
- RAII
- Move semantics
- Type traits
- Placement new
- Exception safety