C++11中的智能指针-shared_ptr

    今天上午在研究boost io_service的时候,打算写一个小的demo,用到智能指针中的shared_ptr,虽然之前看了很多这个方面的资料,但是使用的并不多,写起来code,才发现对于shared_ptr的了解真的是有限,手生的很,因此边搜索资料,边写code,完成之后做一个总结.

    shared_ptr的基本概念这里就不做介绍了,主要说下用到的几个比较重要的知识点。

    一、shared_ptr的初始化。

            shared_ptr初始化主要有2种方式。

                第一种:采取shared_ptr构造函数的方式。std::shared_ptr<T> ptr(new T())  这种方式采取在智能指针构造函数中放入一个指针对象。

          第二种:采取make_shared的方法。std::shared_ptr<T>=std::make_shared<T>();这里要特别注意的是,make_shared函数的参数是T构造函数的参数。比如我们在创建一个线程的智能指针的时候,std::shared_ptr<std::thread> thread=std::make_shared<std::thread>(func);这里func为std::thread构造函数需要传入的函数指针。如果是在某个类中使用,我们这里可以修改为如下:std::shared_ptr<std::thread> thread=std::make_shared<std::thread>(&A::func,this)。

二、get()函数返回裸指针。如果在需要使用裸指针的时候,可以通过get函数返回裸指针。比如std::shared_ptr<T> t(new T());T* tPtr=t.get();这样就可以返回指向T的裸指针。


三、shared_from_this()函数返回指向this的shared_ptr。

        使用场景:当类A被shared_ptr管理,且在类A的成员函数中,需要把当前类对象作为参数传递给其他函数时,就需要传递一个指向自身的shared_ptr.

        使用的时候,让类A继承自std::enable_shared_from_this<T>即可。

      下面的图是从csdn上找的


猜你喜欢

转载自blog.csdn.net/sankeshu_1982/article/details/80092201
今日推荐