smart_ptr之shared_ptr

Posted jingliang10101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了smart_ptr之shared_ptr相关的知识,希望对你有一定的参考价值。

c++11标准和boost都提供了智能指针的功能。智能指针是普通指针的封装,智能指针是一个对象,对象里面包含了原生指针。可以使用智能指针对象的get()方法可获得封装在里面的原生指针。使用智能指针管理内存,用到智能指针的地方需要统一使用c++11或boost库,切忌混合使用。c++11的智能指针包含在<memory>库,boost库是<boost/smart_ptr>。

最常用到的智能指针是shared_ptr,是对auto_ptr(已弃用)和unique_ptr的改进。shared_ptr是引用计数型指针,所以它以前曾有名字count_ptr。当拷贝一个对象时(比如调用拷贝构造函数、调用赋值函数、作为函数参数传递(会在函数内部拷贝一个临时对象,当退出函数时,析构该对象))引用计数加1,当调用析构函数和reset()重置函数时,引用计数减1。当引用计数为0时,会delete该对象里的指针。shared_ptr是使用new申请内存,不能应用于使用new[]分配内存的场景。

在对象的函数参数中,如果需要传递该对象this指针,可以将该对象所在类继承自enable_shared_form_this<T>,使用该类的shared_from_this()函数会返回一个封装了this指针的shared_ptr<T>对象。这种使用场景在,异步调用过程中,不知道何时调用回调函数,而该回调函数里需要使用到this对象。这就保证了无论何时调用回调函数u,this对象都一直存在且有效。

以上是关于smart_ptr之shared_ptr的主要内容,如果未能解决你的问题,请参考以下文章

c++ smart_ptr 总结

Smart Pointer Programming Techniques

Smart Pointer Programming Techniques

顶点缓冲区对象(删除进程)opengl

Assertion `px != 0' failed

需要提升 python 显式类型转换