if( p != 0) {tmp.px = p;tmp.pn = boost::detail::shared_count( r );
运行效果
if( p != 0) {tmp.px = p;tmp.pn = boost::detail::shared_count( r );
运行效果
通过源码分析 boost::intrusive_ptr无引用计数器利便外部挪用者自界说计数器使用。在其他地方和 boost::shared_ptr无差异。
http://theboostcpplibraries.com/
//重置工具voidresetBOOST_SP_NOEXCEPT { this_type.swap(* this); }
你知道RAII吗?
本文是博主曾经学习 智能指针 时总结的条记由于时间比力久远可能部门功效没有更详细的解说后续有时间会重新review继续完善。
指针 作为C/C++语言重要的特性之一在使用中很容易泛起疏忽释放内存的现象导致内存溢出。而博主之前接触的如C#、Java等高级语言险些不需要思量释放内存。这对于那些放弃C/C++转投“高级”语言的同学而言是个庞大的捏词。
可是C++厥后泛起了 智能指针 很大水平上弥补了这一繁琐的“短板”。在使用中也有种更“高级”语言的感受。不管是什么语言只要学醒目效果都是差不多的只是在使用上“仁者见仁智者见智”而已。
希望当初下决议学习C/C++的你我不忘初心继续走好这条“无聊又刺激”的编程之路。
~intrusive_ptr{if( px != 0) intrusive_ptr_release( px ); }
当函数需要一个由共享指针所治理的工具而这个工具的生存期又不依赖于这个函数时就可以使用弱指针。只要法式中另有一个共享指针掌管着这个工具函数就可以使用该工具。如果共享指针复位了就算函数里能获得一个共享指针工具也不存在了。
以下示例使用boost官方提供的示例说明弱指针的使用。
public:
学习过C/C++的同学都知道有一个很是利便又特别让人烦的数据类型那就是指针不仅操作贫苦另有种种“级别”一级指针、二级指针、n级别指针…许多人从入门到放弃C/C++很大一个原因是因为搞不清楚指针、以及指针与其他工具之间千丝万缕的关系。
而在实际的开发历程中经常会泛起因为未释放申请的工具而导致内存溢出、法式奔溃。这里就包罗指针工具的释放那如果有一种指针能申请工具后“自动”释放是不是很爽?本文将先容Boost中提到的种种智能指针。
// 有参结构函数只能使用shared_ptr和weak_ptr初始化template< classY> weak_ptr(shared_ptr<Y> const& r, element_type * p) BOOST_SP_NOEXCEPT: px( p ), pn( r.pn ) {}
classPerson{public: Person( std:: stringname, intage) :name(name), age(age){ cout<< "Person 的结构函数"<< endl; }
// 引用计数器爽long use_count constBOOST_SP_NOEXCEPT {returnpn.use_count; } private: element_type * px; // contained pointerboost::detail::weak_count pn; // reference counter
通过先容Boost C++ 库的种种智能指针之后我们应该能够编写宁静的代码来使用动态分配的工具和数组。
如果需要将智能工具存储在容器中下面代码段可以直接实现。
template< classT> classscoped_ptr // noncopyable{private:
if( tmp != 0) {pn = boost::detail::shared_count( r );boost::detail::sp_deleter_c。
本文来源:leyu乐鱼app官方网站首页-www.meibao0-6.com
QQ:720034824
手机:17811958066
电话:072-65921493
邮箱:admin@meibao0-6.com
地址:云南省德宏傣族景颇族自治州麦盖提县达仁大楼306号