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()

Покройте тестами, убедитесь в отсутствии утечек памяти.