小编Evg*_*hev的帖子

Make_shared - 自己的实现

我正在尝试自己实现shared_ptr.我有问题make_shared.它的主要特征是std::make_shared在连续的内存块中分配计数器块和对象.我怎么能这样做?

我尝试过这样的事情:

template<class T>
class shared_ptr
{
private:
    class _ref_cntr
    {
    private:
        long counter;

    public:
        _ref_cntr() :
            counter(1)
        {
        }

        void inc()
        {
            ++counter;
        }

        void dec()
        {
            if (counter == 0)
            {
                throw std::logic_error("already zero");
            }

            --counter;
        }

        long use_count() const
        {
            return counter;
        }
    };

    template<class _T>
    struct _object_and_block
    {
        _T object;
        _ref_cntr cntr_block;

        template<class ... Args>
        _object_and_block(Args && ...args) :
            object(args...)
        {
        }
    };

    T* _obj_ptr;
    _ref_cntr* _ref_counter;

    void _check_delete_ptr()
    { …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr

5
推荐指数
1
解决办法
3556
查看次数

标签 统计

c++ ×1

shared-ptr ×1