智能指针总结

std::shared_ptr 代码:

#include <memory>

class Test : public std::enable_shared_from_this<Test>
{
    public:
        /*
        //error!
        Test()
        {
            shared_from_this();
        }
        */
        void print(){shared_from_this();}
        int id;
};

int main()
{
    std::shared_ptr<Test> ptest(new Test());
    ptest->print();
    /*
    //error!
    Test *ptest = new Test();
    ptest->print();
    */
}

std::enable_shared_from_this<T> 是一个模板类,其中有一个成员函数  shared_ptr<T> shared_from_this() {...} 其实现的过程其实类似于:

std::shared_ptr<T> pobj(new T());
std::weak_ptr<T> pwobj(ptest);
std::shared_ptr<T> pobj(pwobj);

真实实现可以查看源码,即必须先有 std::shared_ptr<T> 对象产生,才会有 std::weak_ptr,再会有 std::shared_from_this()



原文地址:https://www.cnblogs.com/tianyajuanke/p/3456236.html