智能指针总结

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

 



 

你可能感兴趣的:(总结)