「代码片段」 shared_ptr


最后更新时间:2024年10月03日

[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]

「代码片段」 shared_ptr


#include <iostream>

template<typename T>
class shared_ptr {
public:
    shared_ptr(T* ptr = nullptr) : ptr(ptr), ref_count(new size_t(1)) {}

    shared_ptr(const shared_ptr& other) : ptr(other.ptr), ref_count(other.ref_count) {
        if (ref_count) ++(*ref_count);
    }

    shared_ptr& operator=(const shared_ptr& other) {
        if (this!= &other) {
            release();
            ptr = other.ptr;
            ref_count = other.ref_count;
            if (ref_count) ++(*ref_count);
        }
        return *this;
    }

    ~shared_ptr() {
        release();
    }

    T& operator*() const { return *ptr; }
    T* operator->() const { return ptr; }

    size_t use_count() const { return ref_count? *ref_count : 0; }

private:
    T* ptr;
    size_t* ref_count;

    void release() {
        if (ref_count && --(*ref_count) == 0) {
            delete ptr;
            delete ref_count;
        }
    }
};
[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]