3. Умные указатели
cpp-labs
|-- src/libcsc/libcsc/smartptr
| |-- SharedPtr.hpp
| `-- UniquePtr.hpp
`-- test/libcsc/libcsc
`-- smartptr.cpp
Реализуйте два шаблонных типа умных указателей:
UniquePtr - тип без счетчика ссылок, безраздельно владеющий указателем.
SharedPtr - тип со счетчиком ссылок для разделяемого владения указателем.
Реализуйте специальные методы в соответствии с Rule of five.
Реализуйте следующие методы классов. В сигнатурах намеренно не указана константность, определите самостоятельно, в каких случаях она нужна.
Для UniquePtr и SharedPtr:
-
T &operator*()
-
T *operator->()
-
T *get()
-
void reset(T *p = nullptr)
Только для SharedPtr:
-
std::size_t use_count()
Покройте тестами, убедитесь в отсутствии утечек памяти.