Skip to content

Подсчет ссылок для управления ресурсами

License

Notifications You must be signed in to change notification settings

nothingholy/lab-03-shared-ptr

 
 

Repository files navigation

Build Status forthebadge nothingholy GitHub repo size

Лабораторная работа №3

Задание

SharedPtr реализует подсчет ссылок на ресурс. Ресурс освободится тогда, когда счетчик ссылок на него будет равен 0. Как видно, система реализует одно из основных правил сборщика мусора. Многопоточное программирование сложно представить без использования класса shared_ptr. Например, класс scoped_refptr (аналог std::shared_ptr) используется в Chromium 32,753 раз. Чтобы лучше усвоить и понять принцип работы этого "умного" указателя, необходимо его реализовать своими руками.

Реализуйте шаблон класса SharedPtr. Для счетчика ссылок используйте переменную класса std::atomic_uint. Интерфейс работы с этим классом аналогичен работе с переменной типа unsigned int, т.е. к нему применимы операции префиксного инкремента и декремента.

template <typename T>
class SharedPtr {
public:
    SharedPtr();
    SharedPtr(T* ptr);
    SharedPtr(const SharedPtr& r);
    SharedPtr(SharedPtr&& r);
    ~SharedPtr();
    auto opeartor=(const SharedPtr& r) -> SharedPtr&;
    auto opeartor=(SharedPtr&& r) -> SharedPtr&;

    // проверяет, указывает ли указатель на объект
    operator bool() const;
    auto operator*() const -> T&;
    auto operator->() const -> T*;
    
    auto get() -> T*;
    void reset();
    void reset(T* ptr);
    void swap(SharedPtr& r);
    // возвращает количество объектов SharedPtr, которые ссылаются на тот же управляемый объект
    auto use_count() const -> size_t;
};

About

Подсчет ссылок для управления ресурсами

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CMake 77.1%
  • C++ 12.0%
  • Shell 8.8%
  • Dockerfile 2.1%